winform中关于菜单如何循环执行的问题 在winform中,菜单有二级菜单,三级菜单等等,对于每个终端菜单的点击事件执行的是同一个操作,除了其中一个变量i的不同。现在如何进行这个操作呢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 public void YourOper(int i){..进行的操作} button_click(){ YourOper(参数)}就可以了呀 谢谢大家的回复,我把代码贴上来了把 private void 道路_Click(object sender, EventArgs e) { myMapParam = m_map.GetCurrentMapParam(); layers = myMapParam.Layers[10]; this.道路.Checked = !this.现状道路.Checked; if (this.道路.Checked) { layers.Visible = true; } else { layers.Visible = false; } m_map.SetCurrentMapParam(myMapParam); myMapParam.ReturnLayers = true; m_image = m_map.GetMapImage(myMapParam); RefreshStatus(m_image); } 对于不同终端菜单的执行唯一不同的是layers的取值。 是不是这个意思:private void 道路_Click(object sender, EventArgs e) { setlayers(10); }public void setlayers(int i){ myMapParam = m_map.GetCurrentMapParam(); layers = myMapParam.Layers[i]; this.道路.Checked = !this.现状道路.Checked; if (this.道路.Checked) { layers.Visible = true; } else { layers.Visible = false; } m_map.SetCurrentMapParam(myMapParam); myMapParam.ReturnLayers = true; m_image = m_map.GetMapImage(myMapParam); RefreshStatus(m_image);} 其中的“道路”是一个终端菜单项,layers是它对应的一个图层。对于不同的菜单项,对应不同的layers 没有一个menustrip1的一个公共属性吗,直接this.XX.checked吗?这个XX如何定义的啊 //将所有菜单添加为同一事件的代码 private void AllMenu_Click(object sender, EventArgs e) { myMapParam = m_map.GetCurrentMapParam(); //这里是不同,注意 string itemName = ((ToolStripItem)sender).Name;//获取被点击菜单的名称 switch (itemName) { case "道路": layers = myMapParam.Layers[10];break; //…… } /*实际上如果你菜单的Name取的更有技巧,例如成这样"010道路",010代表菜单对应的Layers的下标。 上面的代码就可以变成这样: int itemIndex = int.Parse(((ToolStripItem)sender).Name.Substring(0,3));//获取被点击菜单的名称 layers = myMapParam.Layers[itemIndex]; */ //下面都不变 this.道路.Checked = !this.现状道路.Checked; if (this.道路.Checked) { layers.Visible = true; } else { layers.Visible = false; } m_map.SetCurrentMapParam(myMapParam); myMapParam.ReturnLayers = true; m_image = m_map.GetMapImage(myMapParam); RefreshStatus(m_image); } 如何是先用菜单项实用同一事件在你的<窗口名>.Designer.cs中找到并展开Windows Form Designer generated code在其中找到需要添加事件的菜单项,例如某菜单事件这样定义:this.t2ToolStripMenuItem.Click += new System.EventHandler(this.t2_Click);将后面括号内的内容替换成 this.AllMenu_Click 就搞定了,另:关于菜单项的所有设置都在这里了。 可是“道路”变了撒,道路.checked可能变成XX.checked case "道路": layers = myMapParam.Layers[10];break; case "XX": layers = myMapParam.Layers[XX];break; 不是这个,是下面这个,这个“道路”怎么变成其它终端菜单this.道路.Checked = !this.道路.Checked; if (this.道路.Checked) { layers.Visible = true; } else { layers.Visible = false; } if (this.道路.Checked)改成if(((ToolStripMenuItem)(this.Controls.Find("itemName"))).Checked ) 抱歉,是this.Controls.Find("itemName",true)今天怎么老犯错?? 老大,无法将Control转换成ToolStripMenuItem 找不到的话用Foreach吧foreach(Control control in this.Panel1.Controls )//容器{if( (control is ToolStripMenuItem) ){ Control = new ToolStripMenuItem(); 兄弟,我帮你顶了这么多次你也帮我顶一次吧,我自己顶不了,三次连续回复了,郁闷DELPHI的人怎么都哪样!http://community.csdn.net/Expert/topic/5068/5068467.xml?temp=.4444849谢了 没必要用foreach吧,这个地方仅仅只是需要把“道路”换成公共的菜单条itemName,关键是怎么调用这个itemName,使它具备checked属性 //menuStrip1 菜单栏名 ToolStripItem[] menu1 = this.menuStrip1.Items.Find("f1", true);if (((ToolStripMenuItem)menu1[0]).Checked)你再试试 再加个参数可否?private void 道路_Click(object sender, EventArgs e) { this.道路.Checked = !this.现状道路.Checked;//(把它提出来了,不知你喜欢否) setlayers(10,this.道路.Checked); }public void setlayers(int i,bool ischecked){ myMapParam = m_map.GetCurrentMapParam(); layers = myMapParam.Layers[i]; if (ischecked) { layers.Visible = true; } else { layers.Visible = false; } m_map.SetCurrentMapParam(myMapParam); myMapParam.ReturnLayers = true; m_image = m_map.GetMapImage(myMapParam); RefreshStatus(m_image);} "索引超出了数组界限"那是因为没有找到菜单项是这样写的吗?ToolStripItem[] menu1 = this.menuStrip1.Items.Find(itemName, true);如果是,改成ToolStripItem[] menu1 = null; menu1 = this.menuStrip1.Items.Find(itemName, true);if (menu1 != null && ((ToolStripMenuItem)menu1[0]).Checked)//加个判断,只有找到了才做处理…… 关于UDP协议的的问题? socket的连接超时怎么设置 不能删除SQL Server数据库文件? 如何将一个XML文件读入DataSet中,并导入到SQL Server2005数据库表中 C#同一个工程里能有多个Main()函数吗? 从Excel取日期型数据的问题!!!!急..在线等!!!!!!!!!!!!!!!!! 一个弹出窗口的问题 我太菜了。。各位gg来指点一下哈 各位大虾说说看 xml 到底有哪些用处,看了老半天的书都没有看出个所以然来。 多线程cpu跑满了 C#打印问题 如何在.net页里引用一个htm页?
{
..进行的操作
}
button_click()
{
YourOper(参数)
}
就可以了呀
private void 道路_Click(object sender, EventArgs e)
{
myMapParam = m_map.GetCurrentMapParam();
layers = myMapParam.Layers[10];
this.道路.Checked = !this.现状道路.Checked;
if (this.道路.Checked)
{
layers.Visible = true;
}
else
{
layers.Visible = false;
}
m_map.SetCurrentMapParam(myMapParam);
myMapParam.ReturnLayers = true;
m_image = m_map.GetMapImage(myMapParam);
RefreshStatus(m_image); }
对于不同终端菜单的执行唯一不同的是layers的取值。
private void 道路_Click(object sender, EventArgs e)
{
setlayers(10);
}
public void setlayers(int i)
{
myMapParam = m_map.GetCurrentMapParam();
layers = myMapParam.Layers[i];
this.道路.Checked = !this.现状道路.Checked;
if (this.道路.Checked)
{
layers.Visible = true;
}
else
{
layers.Visible = false;
}
m_map.SetCurrentMapParam(myMapParam);
myMapParam.ReturnLayers = true;
m_image = m_map.GetMapImage(myMapParam);
RefreshStatus(m_image);
}
private void AllMenu_Click(object sender, EventArgs e)
{
myMapParam = m_map.GetCurrentMapParam();
//这里是不同,注意
string itemName = ((ToolStripItem)sender).Name;//获取被点击菜单的名称
switch (itemName)
{
case "道路": layers = myMapParam.Layers[10];break;
//……
}
/*实际上如果你菜单的Name取的更有技巧,例如成这样"010道路",010代表菜单对应的Layers的下标。
上面的代码就可以变成这样:
int itemIndex = int.Parse(((ToolStripItem)sender).Name.Substring(0,3));//获取被点击菜单的名称
layers = myMapParam.Layers[itemIndex];
*/ //下面都不变
this.道路.Checked = !this.现状道路.Checked;
if (this.道路.Checked)
{
layers.Visible = true;
}
else
{
layers.Visible = false;
}
m_map.SetCurrentMapParam(myMapParam);
myMapParam.ReturnLayers = true;
m_image = m_map.GetMapImage(myMapParam);
RefreshStatus(m_image);
}
在你的<窗口名>.Designer.cs中找到并展开Windows Form Designer generated code
在其中找到需要添加事件的菜单项,
例如某菜单事件这样定义:
this.t2ToolStripMenuItem.Click += new System.EventHandler(this.t2_Click);
将后面括号内的内容替换成 this.AllMenu_Click 就搞定了,另:
关于菜单项的所有设置都在这里了。
case "XX": layers = myMapParam.Layers[XX];break;
this.道路.Checked = !this.道路.Checked;
if (this.道路.Checked)
{
layers.Visible = true;
}
else
{
layers.Visible = false;
}
改成
if(((ToolStripMenuItem)(this.Controls.Find("itemName"))).Checked )
foreach(Control control in this.Panel1.Controls )//容器
{
if( (control is ToolStripMenuItem) )
{
http://community.csdn.net/Expert/topic/5068/5068467.xml?temp=.4444849
谢了
ToolStripItem[] menu1 = this.menuStrip1.Items.Find("f1", true);if (((ToolStripMenuItem)menu1[0]).Checked)你再试试
private void 道路_Click(object sender, EventArgs e)
{
this.道路.Checked = !this.现状道路.Checked;//(把它提出来了,不知你喜欢否)
setlayers(10,this.道路.Checked);
}
public void setlayers(int i,bool ischecked)
{
myMapParam = m_map.GetCurrentMapParam();
layers = myMapParam.Layers[i];
if (ischecked)
{
layers.Visible = true;
}
else
{
layers.Visible = false;
}
m_map.SetCurrentMapParam(myMapParam);
myMapParam.ReturnLayers = true;
m_image = m_map.GetMapImage(myMapParam);
RefreshStatus(m_image);
}
是这样写的吗?
ToolStripItem[] menu1 = this.menuStrip1.Items.Find(itemName, true);
如果是,改成ToolStripItem[] menu1 = null;
menu1 = this.menuStrip1.Items.Find(itemName, true);
if (menu1 != null && ((ToolStripMenuItem)menu1[0]).Checked)//加个判断,只有找到了才做处理……