- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我创建了一个扩展 GroupBox 的自定义控件。此控件支持折叠和展开,我使用 GroupBoxRenderer 和 ButtonRenderer 使其看起来像一个典型的 GroupBox,在角落里有一个按钮。我已经处理了所有适当的鼠标事件,这些事件有效地使“按钮”的行为和外观像一个普通的按钮。现在我遇到了一个问题,即 GroupBox 没有使用 TabStop 获得焦点。无论如何,我可以让我的 Collapsable GroupBox 从 TabStop 接收焦点吗?
我希望我可以使用 How to set focus to a control after validation in .NET 中的技巧在 Enter 事件中设置焦点,但我还没有想出一个好方法来确定它何时应该真正获得焦点。我可能会想出一种方法来找到具有下一个最高和最低 TabIndex 的 sibling (如果 TabIndex 相同,则为 ChildIndex),然后确定他们是否失去了焦点,但这似乎有点老套,如果我没有得到,很有可能会崩溃完全正确。
注意:我最初确实创建了用户控件,但由于各种原因这不是我想要的,包括:
这是展开后的样子:
现在当它被折叠(并且有焦点)时:
最佳答案
CheckGroup => 这是自定义控件的一种方法,它继承自控件并在 OnPaint 方法中使用 GroupBoxRenderer 和 CheckBoxRenderer。它是一个容器,通过更改 CheckBoxRenderer 的绘制方式来模拟获得焦点。此代码折叠 CheckGroup 并禁用所有子控件,但您可以根据需要删除其中一个或两个。
using System;
using System.ComponentModel;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Windows.Forms.VisualStyles;
namespace CoolControls
{
[Designer("System.Windows.Forms.Design.ParentControlDesigner, System.Design", typeof(System.ComponentModel.Design.IDesigner))]
public partial class CheckGroup : Control
{
public event EventHandler CheckBoxGotFocus;
public event EventHandler CheckBoxLostFocus;
private int _CheckBoxSideLength;
private Rectangle _CheckBoxBorderRectangle;
private bool _Focused = false;
private bool _Checked;
private CheckBoxState _CheckedState = CheckBoxState.UncheckedNormal;
private int _ExpandedHeight;
[Category("Behavior")]
[Description("Get or set whether the checkbox is checked.")]
public bool Checked
{
get { return _Checked; }
set
{
SetCheckedState(value);
}
}
public CheckGroup()
{
InitializeComponent();
InitControl();
}
private void InitControl()
{
_CheckBoxSideLength = 15;
_Checked = true;
_Focused = false;
_CheckBoxBorderRectangle = new Rectangle(0, 0, _CheckBoxSideLength - 1, _CheckBoxSideLength - 1);
}
private void SetCheckedState(bool pToChecked)
{
_Checked = pToChecked;
if (_Checked)
{
_CheckedState = CheckBoxState.CheckedNormal;
this.Height = _ExpandedHeight;
}
else
{
_CheckedState = CheckBoxState.UncheckedNormal;
this.Height = _CheckBoxSideLength;
}
foreach (Control c in this.Controls)
{
c.Enabled = _Checked;
}
this.Invalidate();
}
protected override void OnPaint(PaintEventArgs pe)
{
base.OnPaint(pe);
Graphics g = pe.Graphics;
GroupBoxRenderer.DrawGroupBox(g, ClientRectangle, " " + this.Text, this.Font, this.ForeColor, TextFormatFlags.Left, GroupBoxState.Normal);
CheckBoxRenderer.DrawCheckBox(g, ClientRectangle.Location, _CheckBoxBorderRectangle, "", null, TextFormatFlags.Left, _Focused, _CheckedState);
}
protected override void OnSizeChanged(EventArgs e)
{
base.OnSizeChanged(e);
if (_Checked)
{
_ExpandedHeight = this.Size.Height;
}
}
protected override void OnMouseDown(MouseEventArgs e)
{
base.OnMouseDown(e);
if (e.Location.Y <= _CheckBoxSideLength)
{
SetCheckedState(!_Checked);
}
}
protected override void OnGotFocus(EventArgs e)
{
base.OnGotFocus(e);
_Focused = true;
Invalidate();
CheckBoxGotFocus.Invoke(this, new EventArgs());
}
protected override void OnLostFocus(EventArgs e)
{
base.OnLostFocus(e);
_Focused = false;
Invalidate();
CheckBoxLostFocus.Invoke(this, new EventArgs());
}
protected override void OnKeyDown(KeyEventArgs e)
{
base.OnKeyDown(e);
if (e.KeyCode == Keys.Space)
{
SetCheckedState(!_Checked);
}
}
protected override void OnResize(EventArgs e)
{
base.OnResize(e);
Invalidate();
}
}
}
关于c# - TabStop 和 Focus on GroupBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17583155/
我有一个名为“groupBox”的组框。我想禁用整个组框,包括组框的名称。我附上图片。我希望它能解决这个问题
如何将 groupBox 标题对齐到中心而不是默认的左定位。 我在很多帖子中读到可以使用模板,但我不知道这样的事情。所以请让我知道如何在中心获得标题。 谢谢 !! 最佳答案 是的,您必须修改模板。 对
我想用WPF groupbox控件来实现这样的界面 有没有办法用WPF groupbox控件实现这样的界面? 最佳答案 一个简单的选择是仅重叠控件,然后使用边距进行播放
我在 WPF 组框中的停靠面板中有一个文本框和数据网格。 我正在从文本框中动态地在数据网格中添加行,
是否可以为 GroupBox 设置位置对齐? Header在 WPF 中?默认是放置在GroupBox的左上角大纲,但我希望它在顶部居中。我知道您可以使用以下方法设置文本的属性:
简单,我想要一个没有标题空间的GroupBox 最接近的是边框,但是“默认情况下”边框与组框的样式不同。 获得所需的GroupBox的最简单方法(最少的xaml /代码)是什么? 谢谢 最佳答案 如果
如何在表单的 GroupBox 中获得圆角?属性选项卡中有任何选项吗? 最佳答案 何时 visual styles已为您的应用程序启用,并且 FlatStyle 属性设置为“系统”时,组框看起来有稍微
我有一个关于 Visual Studio 中 C# 中的 UI 的问题。我想让我的组框自定义为如下所示: 然后,我还希望它的扩展取决于用户的屏幕分辨率,因此组框的大小不是固定的,例如我需要它占屏幕的
我有一个 groupBox,我在其中放置了三个 RadioButton 和一个 TextBox。他们的标签索引就像 5,6,7,8 从单选按钮开始并在文本框中结束但是在我的表单中当我选择时,它会转到单
我有一个 DataGridView 和一个包含一些 ComboBoxes 的 GroupBox 控件。 根据在 ComboBoxes 中选择的内容,网格中的元素会发生变化。 有没有办法说 If (So
我有以下自动生成的列表,我想用它们用 PyQt5 创建组框: Country = ['France', 'France', 'Germany', 'Austria', 'Austria','Spain
我在我的表单页面 (WinForms) 上使用 GroupBox 控件。 GroupBox 包含五个控件(RadioButtons)。 是否知道组框控件是否包含在控件内的任何按钮被选中时无效的属性?
如何去除白边? 最佳答案 您可以将 BorderThickness 设置为 0,但这也会隐藏黑色边框。白色是 ControlTemplate 的一部分,因此您需要创建一个新模板。这是我通过运行 Ref
我正在使用 Windows 应用程序表单 创建一个应用程序。我基本上是 C# 和 Visual Studio 的新手(从昨天开始就一直在使用它)。到目前为止,我已经成功创建了一个简单的表单,如屏幕截图
拿一个 GroupBox,把 Label 放在里面,然后设置 AutoSizeMode = GrowAndShrink 和 AutoSize = true . 会出现两个问题: Label 和 Gro
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
我试图在 XAML 中创建一个包含三个 RadioButton 的 GroupBox。一切看起来都很好,除了我的 GroupBox header 中的 'g' 在底部被截断,如下所示: 我读过其他有格
我正在使用 Visual Studio 2010,但在工具箱中找不到 groupbox。它显示在组件列表中并被选中。我也尝试通过代码插入它,但它也没有显示在代码中。在一些预制页面中,例如 login
如何更改 GroupBox 标题的 Background?我正在尝试这样做: 关于wpf
我正在尝试创建这样的 GroupBox 设计。 我看过GroupBox.HeaderTemplate 但我在创建宽度为 100% 的蓝色背景色时遇到问题。 边界也是如此。 到目前为止我的代码
我是一名优秀的程序员,十分优秀!