窗体焦点停留问题 有form1 这么个窗体 上面有个文本框在form1中show出form2,如何使得输入焦点停留在form1中(鼠标点中form2时鼠标焦点仍在Form1中)有点像屏幕键盘。有答案加多50分,无答案散分,最迟明天结贴。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你show窗体的时候焦点肯定在新窗口里撒你在show窗体的语句后面加上this.focus()看看 调用前后同时调用窗体事件中的Activate()或Focus()方法。 Form2 f2 = new Form2(); f2.Show(); this.textBox1.Focus(); 你是要让form1显示在最上面吗 this.TopMost = true;??? 还是其他的!//这么写form2 永远也的不到焦点拉//form1Form2 f2 = new Form2();f2.Owner = this;f2.Show();//form2Activated 事件 private void Form2_Activated(object sender, EventArgs e) { if (this.Owner != null) { this.Owner.Activate(); } } 不是这样啊(鼠标点中form2时鼠标焦点仍在Form1中)form2类似于屏幕键盘,将鼠标点击按钮输入传回给form1。说白了就是form2不接受焦点,才不会使form1失去焦点 这样连form2的窗体上的按钮都用不了了,类似于屏幕键盘的效果 开始没明白你的意思吗? --------我发贴的时候没看到你下面的话.-----当点击的时候在转移焦点:例如 当点击一个button的时候在 转移焦点 用自定义控件代替Form2,实现类似窗体的功能(可超出Form1窗体显示)。控件中用鼠标钩子,必须了解一些API函数。 好像不行吧,LZ要是在只想要传送鼠标点击的按钮的话,还是自己写个函数把鼠标在Form2里面点击的内容传回Form1显示吧 没有其他方式吗? 这样我与我自己的代码有冲突?而且不实用。api函数的话是哪个? 试试 SetForegroundWindow GetForegroundWindow 这两个函数 在win2000以上的操作系统中window增加了一条附加窗口风格WS_EX_NOACTIVATEhttp://topic.csdn.net/t/20051114/14/4391961.html 里面讲到的方法是有点问题的。其实添加窗体样式,不必调用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"); } } 除非用多线程!!要么就只能把form2关闭才会在form1获得焦点 如何通过XPS虚拟打印机打印任一格式的文件,而不弹出对话框? 数值转换成字符串时如何总是显示正负号? 帮忙看下!! sql查询语句!急急! 100分!!!!求大数运算类和关于大素数的类! C#一个弄不清楚的问题,赋值= 如何应用CDO? 一个关于combobox绑定的问题。出错原因是未将对象绑定到实例。请高手指教!!!!!!! 关于autocad的二次开发!! 我用OleDBAdapter.Update(dataset,"MyTable")报错,怎么办啊? N多客户端,它们的信息怎么传递到服务器上 用WebClient下载,如何逐个下载?
你在show窗体的语句后面加上this.focus()看看
f2.Show();
this.textBox1.Focus();
//这么写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();
}
}
form2类似于屏幕键盘,将鼠标点击按钮输入传回给form1。
说白了就是form2不接受焦点,才不会使form1失去焦点
这样连form2的窗体上的按钮都用不了了,类似于屏幕键盘的效果
控件中用鼠标钩子,必须了解一些API函数。
没有其他方式吗? 这样我与我自己的代码有冲突?而且不实用。api函数的话是哪个?
http://topic.csdn.net/t/20051114/14/4391961.html
{
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");
}
}