[英]How do you add the value of a variable instead of the variable to a mouseclick event in C#?
我决定尝试创建一种简单的编程语言。 到目前为止,一切都在工作,除了一件事 - 通过单击 GUI 元素执行代码。 这是负责将事件添加到按钮的代码行:
btn[x].MouseClick += (sender, e) => runAct(act_alloc, sender, e);
这里的问题是 runAct(); void 需要一个 ID (act_alloc) 才能知道要运行什么代码,但是每次为 GUI 元素创建新操作时 act_alloc 都会发生变化,但是我需要 MouseClick 事件是一个常数,例如:
btn[0].MouseClick += (sender, e) => runAct(2, sender, e);
我需要在将事件添加到元素时获取act_alloc
变量的值,但只是获取值,而不是变量本身 - 我不希望 MouseClick 事件使用不同的 ID( act_alloc
的值在点击该元素的时间),我想鼠标点击事件,每一次的值(使用相同的ID act_alloc
在元素的鼠标点击事件被分配到的时间runAct(...)
该应用程序只是逐行从文件中读取代码。 每次将act_alloc
事件添加到 GUI 元素时, act_alloc
整数都会增加 1。
runAct
void 需要int id, object sender, EventArgs e
。 最后两个只是为了它可以用作鼠标点击。 当某些代码从代码文件添加到元素的 MouseClick 事件时,它会存储在 String[1024,128] - [Event ID, code (<=127 lines)] 中。 这是 runAct 无效:
public void runAct(int id, object sender, EventArgs e)
{
for (int x = 1; x <= Convert.ToInt32(act[id, 0]); x++)
runCode(act[id, x].Split(';'));
}
act
是存储代码的 String[,]。 第一个字符串总是存储的行数,它被转换成一个整数,这样它就不会在没有任何代码运行的情况下一遍runCode
遍地调用runCode
。 runCode
void 执行它所谓的操作 - 运行一行代码。 其中之一可以是act;(gui_element);
,这意味着以下所有代码都存储在行为 string[,] 中。 这到了endact;
线。 代码存储在 string[,] ( act[act_alloc, line]
) 后, act_alloc
增加 1,以便应用程序准备在 string[,] 中存储更多代码。
这是将 MouseClick 事件添加到 GUI 元素的代码:
case "act": //add code to an element
bool wa = true; //keep looping
int ln = 1; //line number
while (wa) //loop for adding more code
{
string actstr = vars(sr.ReadLine()); //read the next line
if (actstr == "endact;") //was that all the code?
{
wa = false; //stop the loop
}
else
{
act[act_alloc, ln] = actstr; //store the line
ln++; //next line
}
}
ln--; //decrease ln by 1 to make sure runAct runs the correct amount of times
act[act_alloc, 0] = ln.ToString(); //the amount of lines stored gets saved
switch (cmd[2]) //what GUI element is this code for?
{
case "text": //a label
for (int x = 0; x < label_alloc; x++) //cycle through all the labels
if (labels[x].Name == cmd[3]) //does the label name match?
labels[x].MouseClick += (sender, e) => runAct(act_alloc, sender, e); //add the event
break;
case "btn": //a button
for (int x = 0; x < btn_alloc; x++) //cycle through all the buttons
if (btn[x].Name == cmd[3]) //does the button name match?
btn[x].MouseClick += (sender, e) => runAct(act_alloc, sender, e); //add the event
break;
}
act_alloc++; //get ready for storing more code
break;
如果这仍然不够信息,请告诉我。
如何在该行之前复制 act_alloc 的值,然后在 runAct(localvariable, sender, e) 中使用该局部变量? (不过,我不确定您的问题实际上是否存在)
– 清醒兄弟
这实际上解决了我的问题,谢谢! 在向元素添加 MouseClick 事件之前,我刚刚添加了一个新的 int :
act[act_alloc, 0] = ln.ToString();
int eid = act_alloc;
switch (cmd[2])
{
case "text":
for (int x = 0; x < label_alloc; x++)
if (labels[x].Name == cmd[3])
labels[x].MouseClick += (sender, e) => runAct(eid, sender, e);
break;
case "btn":
for (int x = 0; x < btn_alloc; x++)
if (btn[x].Name == cmd[3])
btn[x].MouseClick += (sender, e) => runAct(eid, sender, e);
break;
}
act_alloc++;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.