我有一个从父表单加载的子表单。父表单不是MDI父表单。 我想做以下事情:
我想在具有焦点的控件周围禁用虚线/虚线矩形,尤其是Buttons和RadioButtons。
目前我正在使用以下代码:
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);
}
毋庸置疑,这似乎不起作用。我不确定我在这里缺少什么。任何建议和/或建议将不胜感激。
答案 0 :(得分:2)
嗯,我想我找到了一种解决方案。解决方案解决了焦点矩形问题,但没有回答发布的原始代码有什么问题。这是我对矩形问题的理解....如果我有任何错误,请随时纠正我。
看起来有两种类型的虚线/点状矩形:指示控件聚焦的矩形,以及指示控件是默认控件的矩形。这两种情况都要求您为控件创建自定义类在我的情况下,感兴趣的控件是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;
}
}
}
我使用第一种(构造函数代码)方法不允许输入焦点。
这一切都很适合解决矩形问题,但我仍然不明白为什么初始代码不起作用。