// // Copyright (c) PlaceholderCompany. All rights reserved. // using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace KepGridEditor { public partial class CalculateZDialog : Form { private ToolTip tip; private TextBox focusedTexbox = null; //现在或最近一次拥有焦点的输入框 private Dictionary descriptionMap = new Dictionary(); public CalculateZDialog() { InitializeComponent(); focusedTexbox = zExpressionTextBox; InitDescriptionMap(); tip = new ToolTip(); tip.AutomaticDelay = 3000; } public int GetOperationObjectKind() { return operationObjectComboBox.SelectedIndex; } public String GetXExpression() { return xExpressionTextBox.Text; } public String GetYExpression() { return yExpressionTextBox.Text; } public String GetZExpression() { return zExpressionTextBox.Text; } public string GetLExpression() { return lExpressionTextBox.Text; } private void CalculateZDialog_Load(object sender, EventArgs e) { operationObjectComboBox.SelectedIndex = 0; functionCategoryComboBox.SelectedIndex = 0; //这里先清除函数列表 因为程序在调用此函数之前 先调用了 //functionListBox_SelectedIndexChanged函数 //导致重复添加列表项 //所以 在添加前 先清除列表项 functionListBox.Items.Clear(); variationListBox.Items.Clear(); AddOperatorToFunctionCategoryComboBox(); AddFunctionToFunctionCategoryComboxBox(); AddLogicalOperationToFunctionCategoryComboxBox(); FillVariationListBox(); } private void xExpressionButton_Click(object sender, EventArgs e) { //ExpressionZDialog dlg = new ExpressionZDialog(); //DialogResult result = dlg.ShowDialog(); //if (result == DialogResult.Cancel) // return; // //xExpressionTextBox.Text = dlg.GetExpression(); } private void yExpressButton_Click(object sender, EventArgs e) { //ExpressionZDialog dlg = new ExpressionZDialog(); //DialogResult result = dlg.ShowDialog(); //if (result == DialogResult.Cancel) // return; // //yExpressionTextBox.Text = dlg.GetExpression(); } private void zExpressionButton_Click(object sender, EventArgs e) { ExpressionZDialog dlg = new ExpressionZDialog(); DialogResult result = dlg.ShowDialog(); if (result == DialogResult.Cancel) return; zExpressionTextBox.Text = dlg.GetExpression(); } private void lExpressionButton_Click(object sender, EventArgs e) { //ExpressionZDialog dlg = new ExpressionZDialog(); //DialogResult result = dlg.ShowDialog(); //if (result == DialogResult.Cancel) // return; // //lExpressionTextBox.Text = dlg.GetExpression(); } private void CalculateZDialog_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode != Keys.Escape) return; DialogResult = DialogResult.Cancel; } private void InitDescriptionMap() { //descriptionMap.Add() descriptionMap.Add("+", "加号运算符"); descriptionMap.Add("-", "减号运算符"); descriptionMap.Add("*", "乘号运算符"); descriptionMap.Add("/", "除号运算符"); descriptionMap.Add("()","括号运算符"); descriptionMap.Add("^", "幂运算符"); //x^y(x的y次方) descriptionMap.Add("%", "取余运算符"); descriptionMap.Add("sin()", "sin(表达式)"); descriptionMap.Add("cos()", "cos(表达式)"); descriptionMap.Add("tan()", "tan(表达式)"); descriptionMap.Add("sqrt()", "sqrt(表达式)"); descriptionMap.Add("exp()", "exp(表达式)"); descriptionMap.Add("log()", "log(表达式)"); descriptionMap.Add("asin()", "asin(表达式)"); descriptionMap.Add("acos()", "acos(表达式)"); descriptionMap.Add("atan()", "atan(表达式)"); descriptionMap.Add("abs()", "abs(表达式)"); descriptionMap.Add("<", "x", "x>y(x大于y时返回1,x小于或等于y时返回0)"); descriptionMap.Add("!", "!x(将x值取非运算,当x为非零值时返回0,x为零时返回1)"); } private void AddOperatorToFunctionCategoryComboBox() { functionListBox.Items.Add("+"); functionListBox.Items.Add("-"); functionListBox.Items.Add("*"); functionListBox.Items.Add("/"); functionListBox.Items.Add("()"); functionListBox.Items.Add("^"); functionListBox.Items.Add("%"); } private void AddFunctionToFunctionCategoryComboxBox() { functionListBox.Items.Add("sin()"); functionListBox.Items.Add("cos()"); functionListBox.Items.Add("tan()"); functionListBox.Items.Add("sqrt()"); functionListBox.Items.Add("exp()"); functionListBox.Items.Add("log()"); functionListBox.Items.Add("asin()"); functionListBox.Items.Add("acos()"); functionListBox.Items.Add("atan()"); functionListBox.Items.Add("abs()"); } private void AddLogicalOperationToFunctionCategoryComboxBox() { functionListBox.Items.Add("<"); functionListBox.Items.Add(">"); functionListBox.Items.Add("!"); } private void FillVariationListBox() { //variationListBox.Items.Add("l"); //variationListBox.Items.Add("Pl"); //variationListBox.Items.Add("x"); //variationListBox.Items.Add("y"); variationListBox.Items.Add("z"); } private void variationListBox_SelectedIndexChanged(object sender, EventArgs e) { if(variationListBox.SelectedItem == null) { return; } string varStr = variationListBox.SelectedItem.ToString(); focusedTexbox.Paste(varStr); focusedTexbox.Focus(); } private void functionListBox_SelectedIndexChanged(object sender, EventArgs e) { string functionStr = functionListBox.SelectedItem.ToString(); focusedTexbox.Paste(functionStr); if (functionStr.Contains("()")) //如果是有括号的表达式 将插入点设置在括号里 { focusedTexbox.SelectionStart -= 1; } focusedTexbox.Focus(); } private void xExpressionTextBox_Enter(object sender, EventArgs e) { //focusedTexbox = xExpressionTextBox; } private void yExpressionTextBox_Enter(object sender, EventArgs e) { //focusedTexbox = yExpressionTextBox; } private void zExpressionTextBox_Enter(object sender, EventArgs e) { focusedTexbox = zExpressionTextBox; } private void lExpressionTextBox_Enter(object sender, EventArgs e) { //focusedTexbox = lExpressionTextBox; } private void functionListBox_DoubleClick(object sender, EventArgs e) { focusedTexbox.Focus(); } private void variationListBox_DoubleClick(object sender, EventArgs e) { focusedTexbox.Focus(); } private void functionCategoryComboBox_SelectedIndexChanged(object sender, EventArgs e) { int index = functionCategoryComboBox.SelectedIndex; if (index < 0) return; functionListBox.Items.Clear(); if (index == 0) { AddOperatorToFunctionCategoryComboBox(); AddFunctionToFunctionCategoryComboxBox(); AddLogicalOperationToFunctionCategoryComboxBox(); } else if (index == 1) { AddOperatorToFunctionCategoryComboBox(); } else if (index == 2) { AddFunctionToFunctionCategoryComboxBox(); } else if (index == 3) { AddLogicalOperationToFunctionCategoryComboxBox(); } } private void functionListBox_MouseMove(object sender, MouseEventArgs e) { int idx = functionListBox.IndexFromPoint(e.Location);// 获取鼠标所在的项索引 if (idx == -1 || idx >= functionListBox.Items.Count) { return; } string txt = functionListBox.GetItemText(functionListBox.Items[idx]); if (!descriptionMap.ContainsKey(txt)) return; ; string helpInfoStr = descriptionMap[txt]; if (tip.GetToolTip(functionListBox) == helpInfoStr) { return; } tip.SetToolTip(functionListBox, helpInfoStr); } } }