c#窗体控件样式,通过样式更改来移除焦点
本文关键字:样式 焦点 窗体 控件 | 更新日期: 2023-09-27 18:16:30
我有一个从父窗体加载的子窗体。父窗体不是MDI父窗体。我想做以下事情:
我想禁用有焦点控件周围的虚线矩形,特别是按钮和单选按钮。
目前我正在使用以下代码:
foreach (System.Windows.Forms.Control control in this.Controls)
{
// Prevent button(s) and RadioButtons getting focus
if (control is Button | control is RadioButton)
{
HelperFunctions.SetStyle(control, ControlStyles.Selectable, false);
}
}
我的SetStyle方法是
public static void SetStyle(System.Windows.Forms.Control control, ControlStyles styles,
bool newValue)
{
// .. set control styles for the form
object[] args = { styles, newValue };
typeof(System.Windows.Forms.Control).InvokeMember("SetStyle",
BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.InvokeMethod,
null, control, args);
}
不用说,这似乎不起作用。我不知道我在这里错过了什么。如有任何建议和/或建议,我将不胜感激。
嗯,我想我找到了解决办法。该解决方案解决了焦点矩形问题,但没有回答发布的原始代码有什么问题。这是我对矩形问题的理解....如果我有任何错误,请随时纠正我。
看起来有两种类型的虚线/点矩形:表示控件被聚焦的矩形,以及表示控件是默认控件的矩形。这两种情况都要求您为控件创建一个自定义类。在我的例子中,感兴趣的控件是一个RadioButton。下面是代码:
public class NoFocusRadioButton: RadioButton
{
// ---> If you DO NOT want to allow focus to the control, and want to get rid of
// the default focus rectangle around the control, use the following ...
// ... constructor
public NoFocusRadioButton()
{
// ... removes the focus rectangle surrounding active/focused radio buttons
this.SetStyle(ControlStyles.Selectable, false);
}
}
或使用如下:
public class NoFocusRadioButton: RadioButton
{
// ---> If you DO want to allow focus to the control, and want to get rid of the
// default focus rectangle around the control, use the following ...
protected override bool ShowFocusCues
{
get
{
return false;
}
}
}
我使用第一种(构造函数代码)方法来不允许输入焦点。
这些都可以很好地解决矩形问题,但我仍然不明白为什么最初的代码不起作用