在VS2008中返回WinForms很长一段时间后..在VS2008 Express Edition中修补OOD问题。我需要一些控件是“只显示”小工具。用户不应能够更改这些控件的值...窗口小部件由周期性的更新滴答事件更新。我隐约记得有一个ReadOnly属性,您可以设置为具有此行为…现在找不到了。
Enabled属性设置为false:使控件内容变格雷。我希望控制看起来正常。Locked属性设置为false:似乎是为了防止用户意外扭曲可 windows 体设计器中的控件。
我错过了什么?
mhd8tkvw1#
对于一些典型的winforms控件:http://jquiz.wordpress.com/2007/05/29/c-winforms-readonly-controls/这也是一个很好的提示,以保持外观:
Color clr = textBox1.BackColor; textBox1.ReadOnly = true; textBox1.BackColor = clr;
字符串
ntjbwcob2#
要使窗体控件在单击后立即变为只读,请使用以下代码:
public void LockControlValues(System.Windows.Forms.Control Container) { try { foreach (Control ctrl in Container.Controls) { if (ctrl.GetType() == typeof(TextBox)) ((TextBox)ctrl).ReadOnly = true; if (ctrl.GetType() == typeof(ComboBox)) ((ComboBox)ctrl).Enabled= false; if (ctrl.GetType() == typeof(CheckBox)) ((CheckBox)ctrl).Enabled = false; if (ctrl.GetType() == typeof(DateTimePicker)) ((DateTimePicker)ctrl).Enabled = false; if (ctrl.Controls.Count > 0) LockControlValues(ctrl); } } catch (Exception ex) { MessageBox.Show(ex.ToString()); } }
字符串然后从按钮单击事件调用它,如下所示:
LockControlValues(this)
型希望这有助于解决您的问题:快乐编程,www.simplyrajan.co.nr
4urapxun3#
文本框
.ReadOnly属性设置为true
不带ReadOnly的控件
其他控件不总是具有ReadOnly属性。您将需要使用事件来取消编辑过程并保持您的值不可编辑。
thtygnil4#
两个相关属性ReadOnly和Enabled。ReadOnly = true防止编辑使背景变格雷,但仍允许焦点。Enabled = false使背景、文本变格雷,并阻止编辑或聚焦。Windows用户界面约定表明,用户可以看到控件是只读的(这样他们就不会试图编辑它,随后会感到沮丧)。灰显的禁用状态是定义的系统约定,但它是有争议的太多的提示(而且不是一个足够清晰的提示)。最简单的方法可能是将控件设置为ReadOnly,将背景设置为System.Drawing.SystemColors.Window,然后阻止焦点消息。您可以通过捕获OnEnter事件并立即将焦点移动到另一个非只读的控件(例如,关闭或编辑按钮)来实现这一点。或者,您可以派生自己的控件并接受任何WM_SETFOCUS消息。示例如下。我相信各种第三方控件集为您提供了额外的选项和粒度。
public class ReadOnlyTextBox : TextBox { const uint WM_SETFOCUS = 0x0007; public ReadOnlyTextBox() { this.ReadOnly = true; this.BackColor = System.Drawing.SystemColors.Window; this.ForeColor = System.Drawing.SystemColors.WindowText; } protected override void WndProc(ref Message m) { // eat all setfocus messages, pass rest to base if (m.Msg != WM_SETFOCUS) base.WndProc(ref m); } }
0ve6wy6x5#
昨天我在工作中也有同样的要求。除了文本框之外,我不得不禁用整个表单,而不更改它的颜色。所以我把一个调用替换成
form->Enabled = false;
字符串与
IntPtr hWnd = form->Handle; HWND window_handle = (HWND)hWnd.ToPointer(); ::EnableWindow(window_handle, aEnable ? TRUE:FALSE);
型效果很好。你可以在上面看到我正在使用托管C++。整个表单现在已禁用,但未变灰。
dbf7pr2w6#
尽可能使所有控件成为只读的一种更通用的方法是使用反射:
public void LockControls(System.Windows.Forms.Control Container) { try { foreach (Control ctrl in Container.Controls) { var readOnlyProperty = ctrl.GetType().GetProperty("ReadOnly"); if (readOnlyProperty != null) { readOnlyProperty.SetValue(ctrl, true, null); } else { ctrl.Enabled = false; } if (ctrl.Controls.Count > 0) LockControlValues(ctrl); } } catch (Exception ex) { MessageBox.Show(ex.ToString()); } }
6条答案
按热度按时间mhd8tkvw1#
对于一些典型的winforms控件:
http://jquiz.wordpress.com/2007/05/29/c-winforms-readonly-controls/
这也是一个很好的提示,以保持外观:
字符串
ntjbwcob2#
要使窗体控件在单击后立即变为只读,请使用以下代码:
字符串
然后从按钮单击事件调用它,如下所示:
型
希望这有助于解决您的问题:
快乐编程,
www.simplyrajan.co.nr
4urapxun3#
文本框
.ReadOnly属性设置为true
不带ReadOnly的控件
其他控件不总是具有ReadOnly属性。您将需要使用事件来取消编辑过程并保持您的值不可编辑。
thtygnil4#
两个相关属性ReadOnly和Enabled。ReadOnly = true防止编辑使背景变格雷,但仍允许焦点。Enabled = false使背景、文本变格雷,并阻止编辑或聚焦。
Windows用户界面约定表明,用户可以看到控件是只读的(这样他们就不会试图编辑它,随后会感到沮丧)。灰显的禁用状态是定义的系统约定,但它是有争议的太多的提示(而且不是一个足够清晰的提示)。
最简单的方法可能是将控件设置为ReadOnly,将背景设置为System.Drawing.SystemColors.Window,然后阻止焦点消息。您可以通过捕获OnEnter事件并立即将焦点移动到另一个非只读的控件(例如,关闭或编辑按钮)来实现这一点。或者,您可以派生自己的控件并接受任何WM_SETFOCUS消息。示例如下。
我相信各种第三方控件集为您提供了额外的选项和粒度。
字符串
0ve6wy6x5#
昨天我在工作中也有同样的要求。除了文本框之外,我不得不禁用整个表单,而不更改它的颜色。
所以我把一个调用替换成
字符串
与
型
效果很好。你可以在上面看到我正在使用托管C++。整个表单现在已禁用,但未变灰。
dbf7pr2w6#
尽可能使所有控件成为只读的一种更通用的方法是使用反射:
字符串