口中的txt赋值后传回父窗体,再把值赋给gb中的lb,当我鼠标右击时,我怎么判断点击的是哪个gb
呢,要知道是点击得哪个gb我才能把gb中的lb赋值啊。
12 个解决方案
#1
click中有个sender参数,就是你click中的gb
#2
你把这个sender强制转换为gb,然后就可以使用了...
#3
请问我要怎么强制转换呢
private void menuItem1_Click(object sender, System.EventArgs e)
{
Form2 fr=new Form2();
if(fr.ShowDialog()==DialogResult.OK)
{
SortedList sl=fr.get_sl;
foreach(Control c in this.Controls)
{
if( c is GroupBox )
{
就是在这里判断点击得是哪个gb,怎么判断啊
}
}
}
}
private void menuItem1_Click(object sender, System.EventArgs e)
{
Form2 fr=new Form2();
if(fr.ShowDialog()==DialogResult.OK)
{
SortedList sl=fr.get_sl;
foreach(Control c in this.Controls)
{
if( c is GroupBox )
{
就是在这里判断点击得是哪个gb,怎么判断啊
}
}
}
}
#4
我这样改了,可是转换错误,报“指定的转换无效”
Form2 fr=new Form2();
if(fr.ShowDialog()==DialogResult.OK)
{
SortedList sl=fr.get_sl;
GroupBox gb=(GroupBox)sender;//这里错了
this.selectControl(gb,sl);
}
Form2 fr=new Form2();
if(fr.ShowDialog()==DialogResult.OK)
{
SortedList sl=fr.get_sl;
GroupBox gb=(GroupBox)sender;//这里错了
this.selectControl(gb,sl);
}
#5
用GroupBox gb=sender as GroupBox;
#6
谢谢楼上几位朋友
现在是转换成功了,但是无法用转换后gb的属性。
我得界面上有40个gb,我是想右键点击一个得时候,能判断点击得是哪个gb,然后在把gb中得lb得text赋值,转换后又怎么做了,谢谢
现在是转换成功了,但是无法用转换后gb的属性。
我得界面上有40个gb,我是想右键点击一个得时候,能判断点击得是哪个gb,然后在把gb中得lb得text赋值,转换后又怎么做了,谢谢
#7
GroupBox gb=(GroupBox)sender;
switch(gb.name)
不只可以不
switch(gb.name)
不只可以不
#8
GroupBox gb=(GroupBox)sender;这样转换错误
转换后是新的gb,连名字都没有
转换后是新的gb,连名字都没有
#9
谢谢大家,问题解决了
this.contextMenu1.SourceControl;
这样可以获得是哪个控件弹出的菜单。
this.contextMenu1.SourceControl;
这样可以获得是哪个控件弹出的菜单。
#10
楼上的做法统统不行,因为:System.Window.Forms.GroupBox gb = sender as GroupBox;
这个时候得到的gb是个空类型,也就是说sender = MenuItem 。
我的做法是这样的:在弹出右键菜单之前保存了当前鼠标的坐标,然后当另一个窗口关闭后,再用原来保存的坐标来判断是在哪个GroupBox中。再改掉它的Text。
public string _strlb; //从另一个窗口传过来的TEXT
[DllImport("user32.dll", EntryPoint="GetCursorPos")]
public static extern int GetCursorPos (
ref System.Drawing.Point lpPoint
);
[DllImport("user32.dll", EntryPoint="PtInRect")]
public static extern bool PtInRect (
ref System.Drawing.Rectangle lpRect,
int ptX,
int ptY
);
private void menuItem1_Click(object sender, System.EventArgs e)
{
Point mpt = new Point();
GetCursorPos(ref mpt); //保存当前鼠标的坐标
Form2 f2 = new Form2(this as Form1);
f2.ShowDialog();
System.Drawing.Rectangle rect = new Rectangle();;
foreach(System.Windows.Forms.Control ctl in this.Controls)
{
rect = System.Windows.Forms.Screen.GetWorkingArea(ctl);
if (ctl is System.Windows.Forms.GroupBox)
{
if (PtInRect(ref rect,mpt.X,mpt.Y)) //判断当时弹出右键菜单时的坐标在哪个GroupBox里。
{
ctl.Text = _strlb;
break;
}
}
}
}
但是这样做还有一个问题没有修改,就是永远只能改掉同一个GroupBox的Text。主要是判断点是否在控件内有问题,所以我把它提出来,也希望高手帮我改一下。
这个时候得到的gb是个空类型,也就是说sender = MenuItem 。
我的做法是这样的:在弹出右键菜单之前保存了当前鼠标的坐标,然后当另一个窗口关闭后,再用原来保存的坐标来判断是在哪个GroupBox中。再改掉它的Text。
public string _strlb; //从另一个窗口传过来的TEXT
[DllImport("user32.dll", EntryPoint="GetCursorPos")]
public static extern int GetCursorPos (
ref System.Drawing.Point lpPoint
);
[DllImport("user32.dll", EntryPoint="PtInRect")]
public static extern bool PtInRect (
ref System.Drawing.Rectangle lpRect,
int ptX,
int ptY
);
private void menuItem1_Click(object sender, System.EventArgs e)
{
Point mpt = new Point();
GetCursorPos(ref mpt); //保存当前鼠标的坐标
Form2 f2 = new Form2(this as Form1);
f2.ShowDialog();
System.Drawing.Rectangle rect = new Rectangle();;
foreach(System.Windows.Forms.Control ctl in this.Controls)
{
rect = System.Windows.Forms.Screen.GetWorkingArea(ctl);
if (ctl is System.Windows.Forms.GroupBox)
{
if (PtInRect(ref rect,mpt.X,mpt.Y)) //判断当时弹出右键菜单时的坐标在哪个GroupBox里。
{
ctl.Text = _strlb;
break;
}
}
}
}
但是这样做还有一个问题没有修改,就是永远只能改掉同一个GroupBox的Text。主要是判断点是否在控件内有问题,所以我把它提出来,也希望高手帮我改一下。
#11
我已经解决了,就是用this.contextMenu1.SourceControl
#12
楼主,我晕呀,我想尽了办法,你最后来一句cm.SourceControl解决了,哎。。。无语。。
#1
click中有个sender参数,就是你click中的gb
#2
你把这个sender强制转换为gb,然后就可以使用了...
#3
请问我要怎么强制转换呢
private void menuItem1_Click(object sender, System.EventArgs e)
{
Form2 fr=new Form2();
if(fr.ShowDialog()==DialogResult.OK)
{
SortedList sl=fr.get_sl;
foreach(Control c in this.Controls)
{
if( c is GroupBox )
{
就是在这里判断点击得是哪个gb,怎么判断啊
}
}
}
}
private void menuItem1_Click(object sender, System.EventArgs e)
{
Form2 fr=new Form2();
if(fr.ShowDialog()==DialogResult.OK)
{
SortedList sl=fr.get_sl;
foreach(Control c in this.Controls)
{
if( c is GroupBox )
{
就是在这里判断点击得是哪个gb,怎么判断啊
}
}
}
}
#4
我这样改了,可是转换错误,报“指定的转换无效”
Form2 fr=new Form2();
if(fr.ShowDialog()==DialogResult.OK)
{
SortedList sl=fr.get_sl;
GroupBox gb=(GroupBox)sender;//这里错了
this.selectControl(gb,sl);
}
Form2 fr=new Form2();
if(fr.ShowDialog()==DialogResult.OK)
{
SortedList sl=fr.get_sl;
GroupBox gb=(GroupBox)sender;//这里错了
this.selectControl(gb,sl);
}
#5
用GroupBox gb=sender as GroupBox;
#6
谢谢楼上几位朋友
现在是转换成功了,但是无法用转换后gb的属性。
我得界面上有40个gb,我是想右键点击一个得时候,能判断点击得是哪个gb,然后在把gb中得lb得text赋值,转换后又怎么做了,谢谢
现在是转换成功了,但是无法用转换后gb的属性。
我得界面上有40个gb,我是想右键点击一个得时候,能判断点击得是哪个gb,然后在把gb中得lb得text赋值,转换后又怎么做了,谢谢
#7
GroupBox gb=(GroupBox)sender;
switch(gb.name)
不只可以不
switch(gb.name)
不只可以不
#8
GroupBox gb=(GroupBox)sender;这样转换错误
转换后是新的gb,连名字都没有
转换后是新的gb,连名字都没有
#9
谢谢大家,问题解决了
this.contextMenu1.SourceControl;
这样可以获得是哪个控件弹出的菜单。
this.contextMenu1.SourceControl;
这样可以获得是哪个控件弹出的菜单。
#10
楼上的做法统统不行,因为:System.Window.Forms.GroupBox gb = sender as GroupBox;
这个时候得到的gb是个空类型,也就是说sender = MenuItem 。
我的做法是这样的:在弹出右键菜单之前保存了当前鼠标的坐标,然后当另一个窗口关闭后,再用原来保存的坐标来判断是在哪个GroupBox中。再改掉它的Text。
public string _strlb; //从另一个窗口传过来的TEXT
[DllImport("user32.dll", EntryPoint="GetCursorPos")]
public static extern int GetCursorPos (
ref System.Drawing.Point lpPoint
);
[DllImport("user32.dll", EntryPoint="PtInRect")]
public static extern bool PtInRect (
ref System.Drawing.Rectangle lpRect,
int ptX,
int ptY
);
private void menuItem1_Click(object sender, System.EventArgs e)
{
Point mpt = new Point();
GetCursorPos(ref mpt); //保存当前鼠标的坐标
Form2 f2 = new Form2(this as Form1);
f2.ShowDialog();
System.Drawing.Rectangle rect = new Rectangle();;
foreach(System.Windows.Forms.Control ctl in this.Controls)
{
rect = System.Windows.Forms.Screen.GetWorkingArea(ctl);
if (ctl is System.Windows.Forms.GroupBox)
{
if (PtInRect(ref rect,mpt.X,mpt.Y)) //判断当时弹出右键菜单时的坐标在哪个GroupBox里。
{
ctl.Text = _strlb;
break;
}
}
}
}
但是这样做还有一个问题没有修改,就是永远只能改掉同一个GroupBox的Text。主要是判断点是否在控件内有问题,所以我把它提出来,也希望高手帮我改一下。
这个时候得到的gb是个空类型,也就是说sender = MenuItem 。
我的做法是这样的:在弹出右键菜单之前保存了当前鼠标的坐标,然后当另一个窗口关闭后,再用原来保存的坐标来判断是在哪个GroupBox中。再改掉它的Text。
public string _strlb; //从另一个窗口传过来的TEXT
[DllImport("user32.dll", EntryPoint="GetCursorPos")]
public static extern int GetCursorPos (
ref System.Drawing.Point lpPoint
);
[DllImport("user32.dll", EntryPoint="PtInRect")]
public static extern bool PtInRect (
ref System.Drawing.Rectangle lpRect,
int ptX,
int ptY
);
private void menuItem1_Click(object sender, System.EventArgs e)
{
Point mpt = new Point();
GetCursorPos(ref mpt); //保存当前鼠标的坐标
Form2 f2 = new Form2(this as Form1);
f2.ShowDialog();
System.Drawing.Rectangle rect = new Rectangle();;
foreach(System.Windows.Forms.Control ctl in this.Controls)
{
rect = System.Windows.Forms.Screen.GetWorkingArea(ctl);
if (ctl is System.Windows.Forms.GroupBox)
{
if (PtInRect(ref rect,mpt.X,mpt.Y)) //判断当时弹出右键菜单时的坐标在哪个GroupBox里。
{
ctl.Text = _strlb;
break;
}
}
}
}
但是这样做还有一个问题没有修改,就是永远只能改掉同一个GroupBox的Text。主要是判断点是否在控件内有问题,所以我把它提出来,也希望高手帮我改一下。
#11
我已经解决了,就是用this.contextMenu1.SourceControl
#12
楼主,我晕呀,我想尽了办法,你最后来一句cm.SourceControl解决了,哎。。。无语。。