최근에 똑같은 일을 시도했습니다. 놀랍게도 다음과 같은 간단한 해결책을 생각해 냈습니다. 우선, COM 라이브러리의 참조 번호 MSScriptControl
(how to add and remove references in VS)을 추가하십시오. 그런 다음, 모든 숫자 버튼을 클릭 이벤트 후 : 코드의
private void equals_button_Click(object sender, RoutedEventArgs e)
{
MSScriptControl.ScriptControl sc = new MSScriptControl.ScriptControl();
sc.Language = "VBScript";
//Using try catch statement just in case a user enters an invalid expression.
//This becomes more useful when the application gets more advanced.
try
{
object result = sc.Eval(resultBoxText);
//Output the result somehow. E.g.: resultBox.Text = result.ToString();
}
catch
{
MessageBox.Show("Invalid expression!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
그냥이 작은 양 등 7 * 9 "로 문자열을 수행 할 수 있습니다
private void _1_button_Click(object sender, RoutedEventArgs e)
{
resultBoxText += "1";
resultBox.Text = resultBoxText;
}
private void _2_button_Click(object sender, RoutedEventArgs e)
{
resultBoxText += "2";
resultBox.Text = resultBoxText;
}
private void _3_button_Click(object sender, RoutedEventArgs e)
{
resultBoxText += "3";
resultBox.Text = resultBoxText;
}
private void plus_button_Click(object sender, RoutedEventArgs e)
{
resultBoxText += "+";
resultBox.Text = resultBoxText;
}
private void minus_button_Click(object sender, RoutedEventArgs e)
{
resultBoxText += "-";
resultBox.Text = resultBoxText;
}
이 당신을 위해 몇 가지 코드를 넣어 버튼과 동일 6 + 3/6 "이고 올바른 답은"57.5 "입니다. 그러나 내가 언급해야 할 한 가지는 "1 (1)"과 같은 문자열을 제대로 처리 할 수없는 방법입니다. 기술적으로 "1 * 1"로 표시해야하지만 오류가 발생합니다. 그래서, 나는 그것을 해결하기 위해 약간의 코딩을해야했습니다. 하지만 당신이 그 다리에 올 때 그 다리를 건너도록 내버려 둘 것입니다. :)
내가 추가 할 수있는 한 가지 : 숫자 버튼에 모두 "1"또는 "2"또는 "+" "라고 말하면 큰 금액으로 버튼 클릭 수를 집계 할 수 있습니다. 금액입니다. 클릭 할 때마다
private void num_button_click(object sender, RoutedEventArgs e)
{
Button b = (Button)sender;
resultBoxText += b.Text;
resultBox.Text = resultBoxText;
}
그런 다음
모든 당신의 숫자 버튼은 num_button_click 코드를 참조하십시오. 이것은 모든 조작자 버튼 ("+")에서도 작동합니다.
버튼에 "click for one"과 같은 텍스트가 포함 된 경우 원래 코드를 그대로 사용하십시오. 나를 무시하십시오.
그리고 모든 클릭 이벤트에 RoutedEventArgs
이 있다는 것을 알았습니다. WPF를 사용하고 있습니까? 나는 그것이 winforms라고 가정했다. 음, 어쨌든, 코드는 여전히 작동해야합니다 ... 나는 그것이 당신이 찾고있는 것이기를 바랍니다.
오. 여기서 벌레를 열 수 있습니다. 팁 : 시작할 때 사용할 수있는 아주 작은 입력 집합으로 제한하십시오 (작은 문법). – AndyG
이 코드를 더 짧게 만들겠습니까? – Athomield
내가 말하는 것은 당신이 계산기를 아주 작은 부분 집합으로 제한해야한다는 것입니다. a + b, a - b, a * b, a/b 일 수 있습니다. 그런 다음 괄호로 복잡한 표현을 구문 분석하고 조작 순서를 걱정할 필요가 없습니다. – AndyG