一个Windows应用程序.
包含控件:1个textbox,2个button:button1和button2,1个右键菜单ContextMenuStrip,菜单里有一个ITEM名字为START.
在button 1 和button 2点击右键,选择ContextMenuStrip里的START.
在textbox里显示一行字符 : "[Button 1] START DO SOMETHING"
"[Button 2] START DO SOMETHING"
说明:button 1和button 2的右键菜单是同一个.字符串中的START DO SOMETHING都是调用同一个函数得到的.
要求:在字符串里区分是哪个button所触发的.
提示:调用带参数的线程.
包含控件:1个textbox,2个button:button1和button2,1个右键菜单ContextMenuStrip,菜单里有一个ITEM名字为START.
在button 1 和button 2点击右键,选择ContextMenuStrip里的START.
在textbox里显示一行字符 : "[Button 1] START DO SOMETHING"
"[Button 2] START DO SOMETHING"
说明:button 1和button 2的右键菜单是同一个.字符串中的START DO SOMETHING都是调用同一个函数得到的.
要求:在字符串里区分是哪个button所触发的.
提示:调用带参数的线程.
解决方案 »
- WPF 控件 上下左右同时移动的问题
- 如何编程探测网络上另一台计算机的1009端口是否打开?
- 在线等 textBox中只允许输入一个范围内整数,否则弹出对话框提示
- 点a.html按钮时,用ajax得到符合条件的id,username,password。并在textbox下面展示出来
- WinFrom单例模式
- vs2005 如何创建三层结构?
- ******* 进来说说你属于哪个级别?
- 请教关于异步通讯问题
- 如何解决MDI子窗口最大化后标题栏显示在父窗口的菜单栏之上?
- 使用ADSI编程时出现一般性拒绝访问错误,怎回事???急!望赐教!给分多多
- 如何编写sqlserver存储过程??
- 一个小问题,心里没底
事件方法都有两个参数,一个事件的产生者,一个是事件
你可以根据这个sender来判断,如你可以判断它名称:如果是button1则xxx
右击事件调用函数Button_Click(object sender, EventArgs e),
两个按扭右击都调用这个函数.
事件方法都有两个参数,一个事件的产生者,一个是事件
你可以根据这个sender来判断,如你可以判断它名称:如果是button1则xxx
START_Click(object sender, EventArgs e)
{
textbox.text="["+((Butten)sender).Text+"] START DO SOMETHING";
}大概就是这个样子,你看看行不行。
我上面说的有些错误
有两种方法:
1\最简单的方法就是使用两个右键菜单;
2\动态生成右键菜单,例子:
private void button1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
Button button1 = (Button)sender;
button1.ContextMenuStrip = null;
ContextMenuStrip rightMenu = new ContextMenuStrip();
rightMenu.Items.Add(new ToolStripMenuItem("button1的右键",null,new System.EventHandler(this.button1_right_onclick)));
button1.ContextMenuStrip = rightMenu;
// rightMenu.Show();
}
else
return;
}
private void button1_right_onclick(object sender, EventArgs e)
{
return;
}
//VC#的右键有点麻烦要判断一下
//你也可以只响应Form/panel的MouseDown,然后通过判断sender的方式,来决定事件响应方法
//if(sender.text="button1")xx;
{
string strButtonName = ((System.Windows.Forms.Button)sender).Name;
switch (strButtonName)
{
case "button1":
this.****(); //在字符串里区分是哪个button所触发的
break;
case "button2":
this.****(); //在字符串里区分是哪个button所触发的
break;
}
}
主要是取到button的name然后你想怎么操作都可以。
1和2都会同时存在两个菜单-_-;
可以将rightMenu设为成员变量,每次只更改其事件响应;
rightMenu.Items[0].Click -= this.button1_right_onclick;//去掉旧的响应
rightMenu.Items[0].Click += new System.EventHandler(this.button1_right_onclick); //加上新的响应例如:
private void button1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
// button1.ContextMenuStrip = rightMenu; 这个是前提; this.rightMenu.item[0].Click -= this.button1_right_onclick;//去掉旧的响应
this.rightMenu.item[0].Click += new System.EventHandler(this.button1_right_onclick); //加上新的响应
}
else
return;
}
private void button1_right_onclick(object sender, EventArgs e)
{
return;
}
//这样就只会同时存在一个菜单说了这么多,我也刚学的,有什么问题,指出来哈
感谢colonist,windily,Ericjacking
同时接受zjmotion的批评.
特别鸣谢:wumingbing_8027,以后请多光顾我的帖子~
给分了 ~