【问题标题】:Cannot click into controls on form无法点击表单上的控件
【发布时间】:2015-08-09 19:40:40
【问题描述】:

我有一个使用 DevExpress 的 Windows 窗体(尽管我不确定这是否是问题的一部分),它被用于在 csharp 中生成电子邮件。当内容被输入到控件中时(例如,从查找中选择一个电子邮件地址,在消息字段中输入内容)我不能再通过单击该字段来设置光标。

双击确实会选择文本部分,然后可以从那里显示光标并使用箭头键移动 - 但不能通过再次单击来移动。

表单上有许多不同的控件,包括 DevExpress LookupEdit 和备注字段 - 但对于遇到的问题,控件类型似乎并不重要 - 添加不同的控件具有相同的问题。

我找不到任何我认为可能导致此问题的设置或配置 - 有没有其他人遇到过类似的情况并且可以阐明解决问题的方法?

谢谢!

乔恩

【问题讨论】:

  • 如果我没记错的话,TextEdit 至少有一个像“AutoSelect”这样的属性或者默认为 true 的东西。
  • 如果它是一个控件,它会解释它 - 但这就是全部,包括新控件 - DevExpress 和非 DevExpress!它似乎不是特定于控件的东西。我也找不到像“自动选择”这样的远程属性!
  • “双击确实会选择文本部分,然后可以从那里显示光标并使用箭头键移动”...这听起来像是只读控件的行为。 . 你确定不是这样吗?也许它被设置在某处的活动中?
  • 绝对肯定,我已经逐行浏览了代码,它们不是只读的。获得焦点后,可以使用箭头键和键入对其进行编辑。

标签: c# forms winforms devexpress controls


【解决方案1】:

找到了答案——和这里遇到的问题一样:

Windows Forms: Unable to Click to Focus a MaskedTextBox in a Non TopLevel Form

该表单以 toplevel=false 的形式与父级一起打开,但作为一个对话框并没有被激活 - 这就是为什么它可以被访问但不能处理某些窗口事件,例如鼠标点击。

很奇怪,但删除标题栏 (formborderstyle = none) 解决了问题!

最终的解决方案似乎与如何在子窗体上设置父级有关。在我的例子中,我们需要将表单限制在父级的范围内并且能够移动,所以无边界并没有真正解决问题。这是做什么的:-

// Declaration
[DllImport("user32.dll", SetLastError = true)]
private static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);

// Displaying child form
SetParent(modalForm.Handle, this.Handle);
modalForm.Show();

【讨论】:

    猜你喜欢
    • 2012-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-18
    相关资源
    最近更新 更多