焦点问题,好头疼

wangcaidpjxwq 2010-07-19 03:37:00
假设现在有一个主窗体,这个主窗体中包含了2个datagridview和一个text。现在的问题是我在其中一个datagridview中进行输入的时候以showdialog()的方法弹出一个对话窗体,在对话窗体里面有一个text,在text输入内容后关闭对话框。再将text的值传到弹出窗口前正在编辑的单元格中。现在的问题是我如何获得我弹出窗体前的输入焦点?各位帮帮忙。。
...全文
176 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangcaidpjxwq 2010-07-19
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 wangcaidpjxwq 的回复:]
我那个问题用这个方法就可以了:this.ActiveControl.GetContainerControl().ActiveControl,这个就是要得到的焦点控件。不过还是谢谢你了
[/Quote]
不对,少了个东西,应该是:this.ActiveMdiChild.ActiveControl.GetContainerControl().ActiveControl;意思就是首先获得活动子窗体,然后获得子窗体上的活动控件,再获得活动控件上具有焦点的子控件。
wangcaidpjxwq 2010-07-19
  • 打赏
  • 举报
回复
我那个问题用这个方法就可以了:this.ActiveControl.GetContainerControl().ActiveControl,这个就是要得到的焦点控件。不过还是谢谢你了
wangcaidpjxwq 2010-07-19
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 wxm3630478 的回复:]
我帮做了一个测试: 利用引用类型的特点

C# code

//子窗体
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

//添加了一个属性
public DataGridViewCell DGVCel……
[/Quote]
不好意思啊。刚才已经结了帖子了。没看见你的东西。现在没分了。还让你这么辛苦的做了个测试代码,很不好意思。
wxm3630478 2010-07-19
  • 打赏
  • 举报
回复
我帮做了一个测试: 利用引用类型的特点

//子窗体
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

//添加了一个属性
public DataGridViewCell DGVCell
{
get;
set;
}

private void Form1_Load(object sender, EventArgs e)
{
//Form1 上就是一个TextBox1,一个Button1
}

private void button1_Click(object sender, EventArgs e)
{
if (DGVCell != null)
{
DGVCell.Value = textBox1.Text;
}
this.Close();
}
}

--------------------------------------------
//主窗体
private void MenuEdit_Click(object sender, EventArgs e)
{
DataGridViewCell cell = this.dataGridView1.CurrentCell; //得到当前选择的DataGridVIew的单元格
Form1 f = new Form1();
f.DGVCell = cell;
f.ShowDialog();
}


//................不知道适不适合你.....

wangcaidpjxwq 2010-07-19
  • 打赏
  • 举报
回复
好了,自己解决了,试了很多次终于知道如何获得当前窗体的活动子窗体的具有焦点的坐标了。
结贴。顺便发个牢骚:怎么我发现在这个论坛里面我发的帖子总是没人能够回答呢?是我自己的问题还是别人的问题。我也不知道,不过看到这么多热心人还是很让人感动的一件事。
wangcaidpjxwq 2010-07-19
  • 打赏
  • 举报
回复
这里是我监视的时候获得的当前单元格:
((TreeGridView)this.ActiveMdiChild.ActiveControl.Controls[0].Controls[1]).CurrentCell
{DataGridViewTextBoxCell { ColumnIndex=1, RowIndex=12 }}
还是好头疼,要怎么做啊,难道没有高手来指点一下么?
wangcaidpjxwq 2010-07-19
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 yuchen361 的回复:]
我很想知道你获取这个焦点用来做什么。
[/Quote]
想知道啊?说说也没什么。就假设我在一个软件里面进行编辑呢,需要一个特殊字符,但是我又不会用软键盘输入,所以从程序里面提供的特殊字符集中来选择一个特殊字符来插入。和WORD的特殊字符插入差不多。
yuchen361 2010-07-19
  • 打赏
  • 举报
回复
我很想知道你获取这个焦点用来做什么。
xzjxylophone 2010-07-19
  • 打赏
  • 举报
回复
帮顶 UP 。。。。
wangcaidpjxwq 2010-07-19
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 dazhabai 的回复:]
C# code

public partial class Form1 : Form
{
private Form2 form2;
public Form1()
{
InitializeComponent();
DataTable one = new DataTable();
……
[/Quote]
是的,还是在那个cell中,问题就是这个输入焦点怎么获得?通过记录弹出窗体前的输入焦点先不考虑。因为在我这里具体实现起来很麻烦,超级麻烦。刚才想了想,我现在的问题就是集中在:如果获得主窗体中的活动子窗体的具有焦点的控件或者输入焦点所在的位置。不知道这样容易理解不?
mill_dhl 2010-07-19
  • 打赏
  • 举报
回复
看的有点头晕
yuchen361 2010-07-19
  • 打赏
  • 举报
回复
云里雾里的。。。
dazhabai 2010-07-19
  • 打赏
  • 举报
回复
还是从form1连到form2的
dazhabai 2010-07-19
  • 打赏
  • 举报
回复

public partial class Form1 : Form
{
private Form2 form2;
public Form1()
{
InitializeComponent();
DataTable one = new DataTable();
one.Columns.Add("one");
one.Columns.Add("two");
one.Rows.Add("1", "2");
one.Rows.Add("3", "4");
this.dataGridView1.DataSource = one;
form2 = new Form2();
}

private void button1_Click(object sender, EventArgs e)
{
form2.ShowDialog();
}
}

我试了一下,当form2关掉的时候,form1中的datagrid还停留在之前的那个cell中
wangcaidpjxwq 2010-07-19
  • 打赏
  • 举报
回复
好像说的有点复杂了。那大家可以这样理解:我如何获得当前窗体中的活动子窗体的具有焦点的控件或者焦点所在的位置?
wangcaidpjxwq 2010-07-19
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 wxm3630478 的回复:]
晕的一塌糊涂

在点击菜单,弹出对话框之前焦点在什么地方呢.....有选择DataGridVIew某个单元格吗????
[/Quote]
有啊
wxm3630478 2010-07-19
  • 打赏
  • 举报
回复

晕的一塌糊涂

在点击菜单,弹出对话框之前焦点在什么地方呢.....有选择DataGridVIew某个单元格吗????
wangcaidpjxwq 2010-07-19
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 dazhabai 的回复:]
C# code

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{

}


e这个参数中有e.RowIndex以及e.ColumnIndex,已经记录了你的cell的位置
[/Quote]

你没明白我的意思,也是我说的不全面,弹出窗口是通过主菜单弹出来的。并不是在datagridview中进行操作弹出来的。
dazhabai 2010-07-19
  • 打赏
  • 举报
回复

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{

}

e这个参数中有e.RowIndex以及e.ColumnIndex,已经记录了你的cell的位置
wangcaidpjxwq 2010-07-19
  • 打赏
  • 举报
回复
弹出窗口是由主窗体菜单弹出来的。也就是说我不可能从子窗体的单元格双击事件中获得当前输入单元格的坐标。现在就是无法判断我要弹出对话框前子窗体当前的输入焦点。
加载更多回复(7)

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧