窗体焦点停留问题

jishengzu 2010-03-24 10:24:20
有form1 这么个窗体 上面有个文本框
在form1中show出form2,如何使得输入焦点停留在form1中(鼠标点中form2时鼠标焦点仍在Form1中)
有点像屏幕键盘。

有答案加多50分,无答案散分,最迟明天结贴。
...全文
184 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
xingyuebuyu 2010-03-24
  • 打赏
  • 举报
回复
在win2000以上的操作系统中window增加了一条附加窗口风格WS_EX_NOACTIVATE
http://topic.csdn.net/t/20051114/14/4391961.html
wu7295130 2010-03-24
  • 打赏
  • 举报
回复
帮顶一下。。。
现在没时间。晚上下班帮你分析。
可以加我 好友。
qlzf11140820 2010-03-24
  • 打赏
  • 举报
回复
试试 SetForegroundWindow GetForegroundWindow 这两个函数
jishengzu 2010-03-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wxm3630478 的回复:]
开始没明白你的意思吗? --------我发贴的时候没看到你下面的话.

-----当点击的时候在转移焦点:例如 当点击一个button的时候在 转移焦点
[/Quote]

没有其他方式吗? 这样我与我自己的代码有冲突?而且不实用。

api函数的话是哪个?
lexfu 2010-03-24
  • 打赏
  • 举报
回复
好像不行吧,LZ要是在只想要传送鼠标点击的按钮的话,还是自己写个函数把鼠标在Form2里面点击的内容传回Form1显示吧
zzx509 2010-03-24
  • 打赏
  • 举报
回复
用自定义控件代替Form2,实现类似窗体的功能(可超出Form1窗体显示)。
控件中用鼠标钩子,必须了解一些API函数。
wxm3630478 2010-03-24
  • 打赏
  • 举报
回复
开始没明白你的意思吗? --------我发贴的时候没看到你下面的话.

-----当点击的时候在转移焦点:例如 当点击一个button的时候在 转移焦点
jishengzu 2010-03-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wxm3630478 的回复:]
你是要让form1显示在最上面吗 this.TopMost = true;???

还是其他的!
//这么写form2 永远也的不到焦点拉
//form1
Form2 f2 = new Form2();
f2.Owner = this;
f2.Show();


//form2
Activated 事件
private void Form2_Activated(object……
[/Quote]

这样连form2的窗体上的按钮都用不了了,类似于屏幕键盘的效果
wxm3630478 2010-03-24
  • 打赏
  • 举报
回复
你是要让form1显示在最上面吗 this.TopMost = true;???

还是其他的!
//这么写form2 永远也的不到焦点拉
//form1
Form2 f2 = new Form2();
f2.Owner = this;
f2.Show();


//form2
Activated 事件
private void Form2_Activated(object sender, EventArgs e)
{
if (this.Owner != null)
{
this.Owner.Activate();
}
}
jishengzu 2010-03-24
  • 打赏
  • 举报
回复
不是这样啊(鼠标点中form2时鼠标焦点仍在Form1中)
form2类似于屏幕键盘,将鼠标点击按钮输入传回给form1。
说白了就是form2不接受焦点,才不会使form1失去焦点
ck11926375 2010-03-24
  • 打赏
  • 举报
回复
Form2 f2 = new Form2();
f2.Show();
this.textBox1.Focus();
advanced676 2010-03-24
  • 打赏
  • 举报
回复
调用前后同时调用窗体事件中的Activate()或Focus()方法。
特别安静 2010-03-24
  • 打赏
  • 举报
回复
你show窗体的时候焦点肯定在新窗口里撒
你在show窗体的语句后面加上this.focus()看看
yingzhilian2008 2010-03-24
  • 打赏
  • 举报
回复
除非用多线程!!要么就只能把form2关闭才会在form1获得焦点
jishengzu 2010-03-24
  • 打赏
  • 举报
回复
大致就是这种效果,但是加入这代码后点窗体上的按钮还是会获得焦点。
jishengzu 2010-03-24
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 conankid 的回复:]
引用 13 楼 xingyuebuyu 的回复:
在win2000以上的操作系统中window增加了一条附加窗口风格WS_EX_NOACTIVATE
http://topic.csdn.net/t/20051114/14/4391961.html

里面讲到的方法是有点问题的。其实添加窗体样式,不必调用API。

C# code

public partial class Form……
[/Quote]

大致就是这种效果,单加入这代码后点窗体上的按钮还是会获得焦点。
ConanKid 2010-03-24
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 xingyuebuyu 的回复:]
在win2000以上的操作系统中window增加了一条附加窗口风格WS_EX_NOACTIVATE
http://topic.csdn.net/t/20051114/14/4391961.html
[/Quote]
里面讲到的方法是有点问题的。其实添加窗体样式,不必调用API。

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private const int WS_EX_NOACTIVATE = 0x08000000;

/// <summary>
/// 扩展窗体样式(WS_EX_NOACTIVATE)
/// </summary>
protected override CreateParams CreateParams
{
get
{
CreateParams createParams = base.CreateParams;
createParams.ExStyle = createParams.ExStyle | WS_EX_NOACTIVATE;
return createParams;
}
}

private const int WM_MOUSEACTIVATE = 0x0021;
private const int MA_NOACTIVATE = 0x0003;

///解决只添加窗体样式所存在的问题。
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_MOUSEACTIVATE)
{
m.Result = (IntPtr)MA_NOACTIVATE;//偷龙转凤
}
else
base.WndProc(ref m);
}

private void button1_Click(object sender, EventArgs e)
{
SendKeys.Send("A");
}
}

110,577

社区成员

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

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

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