【发布时间】:2015-01-30 04:44:07
【问题描述】:
我的应用程序中的每个表单上都有此代码,这些表单具有文本框,以防止只读文本框被标记为:
private void FrmInventory_Load(object sender, EventArgs e)
{
foreach (var txtbx in Controls.OfType<TextBox>())
{
txtbx.TabStop = (!txtbx.ReadOnly);
}
}
只将这段代码放在一个地方会很好,但我该怎么做,因为每次调用“外部”方法时,它都会触及调用表单上的文本框,这闻起来有点腥。是一种扩展方法,例如:
public static bool TextboxIsReadOnly(this TextBox txtbx)
{
return txtbx.ReadOnly;
}
...然后这样称呼它:
foreach (var txtbx in Controls.OfType<TextBox>())
{
txtbx.TabStop = TextboxIsReadOnly(txtbx);
}
?
这似乎没有多大价值 - 我仍然必须将大部分代码放在每个表单中,就像现在的情况一样。创建一个既是 ReadOnly 又是 TabStop = false 的自定义文本框似乎有点矫枉过正......
有没有办法让每个包含 TextBox 的表单都执行此逻辑,而无需在整个项目中重现代码?
【问题讨论】:
-
这没有意义。只读字段允许某人复制值而不更改它。如果您不希望任何人能够关注该元素,请将其
Enabled属性设置为false。 -
我并不是说我不希望它们成为焦点;我只是不希望它被标签。 IOW,默认是,不输入,但如果你真的想并且努力(你点进去),你可以。在我们的例子中,这是因为从数据库中填充了一些值,用于信息而非编辑目的。
-
hmm.. 这是您目前使用扩展方法的方式吗?只需将其用作实例方法..即
TextBox.TextboxIsReadOnly() -
@B.ClayShannon 哇,这是我从未见过的东西,很高兴有人能帮助你!
-
另外,当我看到“sn-p”这个词时,我想到了预编译代码生成“sn-p”。 msdn.microsoft.com/en-us/library/ms165392.aspx .. 您正在寻找的术语是“可重用”或“代码重用”,因为您接受的解决方案是继承。
标签: c# textbox extension-methods tabstop readonly-attribute