📄 form1.cs
字号:
{//功能:扩大视野
if(color==1) return;
if(int.Parse(scale_X.Text)>=0&&int.Parse(scale_Y.Text)>=0)
{
view_X+=30;
view_Y+=30;
RestoreAllPictures(); //重画所有图像,相当于刷新屏幕
}
}
private void btnViewSmall_Click(object sender, System.EventArgs e)
{//功能:缩小视野
if(color==1) return;
if(int.Parse(scale_X.Text)>=0&&int.Parse(scale_Y.Text)>=0)
{
if(view_X-30>=1&&view_Y-30>=1)
{
view_X-=30;
view_Y-=30;
RestoreAllPictures();//重画所有图像,相当于刷新屏幕
}
}
}
private void btnViewRestore_Click(object sender, System.EventArgs e)
{//功能:恢复视野
if(color==1) return;
view_X=1;
view_Y=1;
RestoreAllPictures();
}
private void btnPictureSmall_Click(object sender, System.EventArgs e)
{//功能:缩小图像比例,即缩小图像
if(color==1) return;
int x,y;
x=int.Parse(scale_X.Text);
y=int.Parse(scale_Y.Text);
if(x<=3||y<=3) return;
if(x-15>=1)
x-=15;
else x-=2;
if(y-15>=1)
y-=15;
else y-=2;
scale_X.Text=x.ToString();
scale_Y.Text=x.ToString();
RestoreAllPictures();
}
private void button2_Click_1(object sender, System.EventArgs e)
{//功能:清除当前图像
if(color<=1) //判断是否已画了当前图像,如果没画,则返回
{
MessageBox.Show("屏幕上没有图像!!!","提示",MessageBoxButtons.OK,MessageBoxIcon.Asterisk);
RestoreAllPictures(); //重画所有图像,相当于刷新屏幕
return; //屏幕没有图像,不能删除
}
if(!StartExcute()) return;
int i;
for(i=0;i<=tempTop;i++)
{
if(String.Compare(tempString[i],startString)==0)
break;
}
if(i>tempTop)
{
MessageBox.Show("您还没有画此表达式的图像","提示",MessageBoxButtons.OK,MessageBoxIcon.Asterisk);
RestoreAllPictures(); //重画所有图像,相当于刷新屏幕
return;
}
tempString[i]="";//tempString[]中存有当前已经显示的表达式的字符串,删除要删除的表达式
ClearFrontPicture();
RestoreAllPictures(); //重画所有图像,相当于刷新屏幕
this.btnDisplay.Enabled=true;
}
private void button1_Click_1(object sender, System.EventArgs e)
{//功能:清除所有图像
//判断是否已画了当前图像,如果没画,则返回
if(color<=1)
{
MessageBox.Show("屏幕上没有图像!!!","提示",MessageBoxButtons.OK,MessageBoxIcon.Asterisk);
RestoreAllPictures(); //重画所有图像,相当于刷新屏幕
return; //屏幕没有图像,不能删除
}
if(tempTop==-1)return ;
graphicsObject.Clear(Color.Black);
DrawBackPicture();
startTop=0; startTopMoveCount=0; opTop=-1; dataTop=-1; //恢复初值
color=1;
for(int i=0;i<=tempTop;i++)
tempString[i]="";
tempTop=-1;
this.btnDisplay.Enabled=true;
}
private void pictureBox_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
label3.Text="X: "+(e.X-pictureBox.Width/2).ToString()+" ,Y: "+(e.Y-pictureBox.Height/2).ToString();
}
private void RestoreAllPictures()
{//功能:恢复所有图像,即重画所有图像
if(tempTop>-1)
{
graphicsObject.Clear(Color.Black);
DrawBackPicture();
color=1;
sign=1; //控制drawFrontPicture()方法里的某些语句是否执行
for(int i=0;i<=tempTop;i++)
{
if(tempString[i]=="")
continue;
startString=tempString[i]; // 依次从tempString[]数组中读取已画的图像字符串
DrawFrontPicture(); //画出刚读取的字符串
}
sign=0;
}
}
private void button5_Click(object sender, System.EventArgs e)
{
scale_X.Text=daultScale_X.ToString();
scale_Y.Text=daultScale_Y.ToString();
RestoreAllPictures(); //重画所有图像,相当于刷新屏幕
}
private void button3_Click(object sender, System.EventArgs e)
{
if(color==1) return; //还没有画图像,执行放大图像这项操作无意义
int x,y;
x=int.Parse(scale_X.Text);
y=int.Parse(scale_Y.Text);
if(x>=800&&y>=800) return;
if(x<15)
x+=2;
else x+=15;
if(y<15)
y+=2;
else y+=15;
scale_X.Text=x.ToString();
scale_Y.Text=x.ToString();
RestoreAllPictures(); //重画所有图像,相当于刷新屏幕
}
private void btnMouseScanf_Click(object sender, System.EventArgs e)
{
if(keyboardWindowCreated==false)
{
formKeyBoard=new FormKeyBoard();
formKeyBoard.Show();
keyboardWindowCreated=true;
}
formKeyBoard.Visible=true;
formKeyBoard.WindowState=FormWindowState.Normal;
expressBox.Text="";
}
private void btnHelp_Click(object sender, System.EventArgs e)
{
if(pictureHelpCreated==false)
{
formPictureHelp=new pictureHelp();
formPictureHelp.Show();
pictureHelpCreated=true;
}
formPictureHelp.Show();
formPictureHelp.Activate();
formPictureHelp.Visible=true;
formPictureHelp.WindowState=FormWindowState.Maximized;
}
private void menuItem9_Click(object sender, System.EventArgs e)
{
Application.Exit();
}
private void menuItem5_Click(object sender, System.EventArgs e)
{
MessageBox.Show(" 软件名称:函数输出图像VS多功能计算机\n **函数输出图像软件能对您输入的任何表达式(包含任意三角函数)输出其对应图像.\n **附加功能中的多功能计算机不但能对您输入的任意表达式输出其结果,还能与图\n 像函数结合使用,求出图像每一点对应的值","软件简要");
}
private void menuItem3_Click(object sender, System.EventArgs e)
{
MessageBox.Show("组合软件 <函数输出图像VS多功能计算机> 版本1.0","软件版本");
}
private void menuItem6_Click(object sender, System.EventArgs e)
{
if(computerFormCreated==false)
{
computerForm=new Form2();
computerForm.Show();
computerFormCreated=true;
}
computerForm.Visible=true;
computerForm.WindowState=FormWindowState.Normal;
}
public void InitializeOpchTblStack() //制定运算符及其特性(优先级和单双目)的运算符表
{
//public int[]osp={6,6,6,6,6,6,6,6,6,6,6,5,3,3,2,2,7,0,1}; //数组中元素依次为: "sin","cos","tan","cot","arcsin","arccos","arctan","sec","csc","ln","^","*","/","+","-","(",")","" 的栈外(因为有的运算符是从右向左计算,有的是从左往右计算,用内外优先级可以限制其执行顺序)优先级
//public int[]isp={5,5,5,5,5,5,5,5,5,5,5,4,3,3,2,2,1,1}; //数组中元素依次为: "sin","cos","tan","cot","arcsin","arccos","arctan","sec","csc","ln","^","*","/","+","-","(","end" 的栈内(因为有的运算符是从右向左计算,有的是从左往右计算,用内外优先级可以限制其执行顺序)优先级
opchTbl[0].op="sin"; opchTbl[0].code=1; opchTbl[0].grade='s';
opchTbl[1].op="cos"; opchTbl[1].code=2; opchTbl[1].grade='s';
opchTbl[2].op="tan"; opchTbl[2].code=3; opchTbl[2].grade='s';
opchTbl[3].op="cot"; opchTbl[3].code=4; opchTbl[3].grade='s';
opchTbl[4].op="arcsin"; opchTbl[4].code=5; opchTbl[4].grade='s';
opchTbl[5].op="arccos"; opchTbl[5].code=6; opchTbl[5].grade='s';
opchTbl[6].op="arctan"; opchTbl[6].code=7; opchTbl[6].grade='s';
opchTbl[7].op="arccot"; opchTbl[7].code=8; opchTbl[7].grade='s';
opchTbl[8].op="sec"; opchTbl[8].code=9; opchTbl[8].grade='s';
opchTbl[9].op="csc"; opchTbl[9].code=10; opchTbl[9].grade='s';
opchTbl[10].op="ln"; opchTbl[10].code=11; opchTbl[10].grade='s';
opchTbl[11].op="^"; opchTbl[11].code=12; opchTbl[11].grade='d';
opchTbl[12].op="*"; opchTbl[12].code=13; opchTbl[12].grade='d';
opchTbl[13].op="/"; opchTbl[13].code=14; opchTbl[13].grade='d';
opchTbl[14].op="+"; opchTbl[14].code=15; opchTbl[14].grade='d';
opchTbl[15].op="-"; opchTbl[15].code=16; opchTbl[15].grade='d';
opchTbl[16].op="("; opchTbl[16].code=17; opchTbl[16].grade='d';
opchTbl[17].op=")"; opchTbl[17].code=18; opchTbl[17].grade='d';
opchTbl[18].op=" "; opchTbl[18].code=19; opchTbl[18].grade='d';
}
public void CreterionFaction() //此函数对输入表达式进行各种规范化,如消去空格/单目转换为双目/统一转化为小写字母
{
startString=expressBox.Text;
//以下为消去待扫描字符串中的所有空格字符
for(int i=0;i<startString.Length;i++)
if(startString[i].Equals(' '))
{
startString=startString.Remove(i,1);
i--;
}
//以下代码使待扫描字符串的单目('+'和'-')变为双目
if(startString.Length!=0)
if(startString[0]=='+'||startString[0]=='-')
{
startString=startString.Insert(0,"0");
}
for(int i=0;i<startString.Length-1;i++)
{
if((startString[i]=='(')&&(startString[i+1]=='-'))
startString=startString.Insert(i+1,"0");
}
startString=startString.Insert(startString.Length,")");
//将待扫描字符串字号字母转化为小写字母
startString=startString.ToLower();
}
public bool CheckParentthese() //检查括号是否匹配
{
int number=0;
for(int i=0;i<startString.Length-1;i++)
{
if(i=='(') number++;
if(i==')') number--;
if(number<0) return false;//右括号不能在前面
}
if(number!=0)
{
return false;
}
return true;
}
public int CheckFollowCorrect() //给运算表达式分块(三角函数...算术运算符等),再根据其返回值来检验其属于哪类错误
{
string str,oldString="",newString="";
int dataCount=0,characterCount=0;
if(startString.Equals(")"))
return 0; //输入字符串为空返回值
if((startString[0]=='*')||(startString[0]=='/')||(startString[0]=='^')||(startString[0]==')'))
return 11; //首字符输入错误返回值
for(int i=0;i<startString.Length;i++)
{
if((oldString.Equals("三角函数"))&&(newString.Equals("右括号")))
return 2; //三角函数直接接右括号错误返回值
if((oldString.Equals("左括号"))&&(newString.Equals("算术运算符")))
return 3; //左括号直接接算术运算符错误返回值
if((oldString.Equals("数字序列"))&&(newString.Equals("三角函数")))
return 4; //数字序列后直接接三角函数错误返回值
if((oldString.Equals("数字序列"))&&(newString.Equals("左括号")))
return 5; //数字序列后直接接左括号错误返回值
if((oldString.Equals("算术运算符"))&&(newString.Equals("右括号")))
return 6; //算术运算符后直接接右括号错误返回值
if((oldString.Equals("右括号"))&&(newString.Equals("左括号")))
return 7; //右括号直接接左括号错误返回值
if((oldString.Equals("右括号"))&&(newString.Equals("三角函数")))
return 8; //右括号直接接三角函数错误返回值
if((oldString.Equals("数字序列"))&&(newString.Equals("数字序列")))
return 9; //数字序列后直接接'pi'/'e'或'pi'/'e'直接接数字序列错误返回值
if((oldString.Equals("算术运算符"))&&(newString.Equals("算术运算符")))
return 10; //算术运算符后直接接算术运算符错误返回值
oldString=newString;
if(i<startString.Length-5&&startString.Length>=6)
{
str=startString.Substring(i,6);
if((str.CompareTo("arcsin")==0)||(str.CompareTo("arccos")==0)||(str.CompareTo("arctan")==0)||(str.CompareTo("arccot")==0))
{
newString="三角函数";
i+=5; characterCount++;
continue;
}
}
if(i<startString.Length-2&&startString.Length>=3)
{
str=startString.Substring(i,3);
if((str.CompareTo("sin")==0)||(str.CompareTo("cos")==0)||(str.CompareTo("tan")==0)||(str.CompareTo("cot")==0)||(str.CompareTo("sec")==0)||(str.CompareTo("csc")==0))
{
newString="三角函数";
i+=2; characterCount++;
continue;
}
}
if(i<(startString.Length-1)&&(startString.Length)>=2)
{
str=startString.Substring(i,2);
if(str.CompareTo("ln")==0)
{
newString="三角函数";
i+=1; characterCount++;
continue;
}
if(str.CompareTo("pi")==0)
{
newString="数字序列";
i+=1;dataCount++;
continue;
}
}
str=startString.Substring(i,1);
if(str.Equals("^")||str.Equals("*")||str.Equals("/")||str.Equals("+")||str.Equals("-"))
{
newString="算术运算符";
characterCount++;
continue;
}
if(str.Equals("e"))
{
newString="数字序列";
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -