WinForms NumericUpDown:有没有办法阅读有关文本选择的信息?
Posted
技术标签:
【中文标题】WinForms NumericUpDown:有没有办法阅读有关文本选择的信息?【英文标题】:WinForms NumericUpDown: Is there a way to read the info about text selection? 【发布时间】:2013-11-20 13:03:11 【问题描述】:WinForms NumericUpDown 允许我们使用 Select(Int32, Int32) 方法选择其中的文本范围。有什么方法可以设置/检索所选文本的起点、所选字符数和所选文本部分,就像我们可以使用 SelectionStart、SelectionLength 和 SelectedText 属性对其他类似文本框的控件一样?
【问题讨论】:
【参考方案1】:与 LarsTech 的回答类似,您可以快速将 NumericUpDown.Controls[1]
转换为 TextBox
以访问这些属性,而无需创建新类。
((TextBox)numericUpDown1.Controls[1]).SelectionLength; // int
((TextBox)numericUpDown1.Controls[1]).SelectionStart; // int
((TextBox)numericUpDown1.Controls[1]).SelectedText; // string
【讨论】:
【参考方案2】:NumericUpDown 控件具有可从控件集合访问的内部 TextBox。它是集合中 UpDownButtons 控件之后的第二个控件。由于 WinForms 不再处于开发阶段,因此可以肯定地说 NumericUpDown 控件的底层架构不会改变。
通过继承 NumericUpDown 控件,您可以轻松地公开这些 TextBox 属性:
public class NumBox : NumericUpDown
private TextBox textBox;
public NumBox()
textBox = this.Controls[1] as TextBox;
public int SelectionStart
get return textBox.SelectionStart;
set textBox.SelectionStart = value;
public int SelectionLength
get return textBox.SelectionLength;
set textBox.SelectionLength = value;
public string SelectedText
get return textBox.SelectedText;
set textBox.SelectedText = value;
【讨论】:
这是个好主意!!我知道NumericUpDown由几个子控件组成,其中一个是TextBox,所以实际上所有解决方案的重点是如何找到这个文本框。但我猜这种方法是最简单的,而且它也没有使用可能会导致安全限制问题的反射。如果担心子控件索引1,我们可以简单的枚举NumericUpDown.Controls集合,找到TextBox类型的控件,让我们的代码健壮通用。【参考方案3】:这对于普通的 NumericUpDown 控件是不可能的。
在本文中,作者解释了他如何将 NumericUpDown 控件子类化以公开底层 TextBox 对象,从而公开“缺失”的属性:
http://www.codeproject.com/Articles/30899/Extended-NumericUpDown-Control
他使用反射来获得对底层 TextBox 对象的引用:
private static TextBox GetPrivateField(NumericUpDownEx ctrl)
// find internal TextBox
System.Reflection.FieldInfo textFieldInfo = typeof(NumericUpDown).GetField("upDownEdit", System.Reflection.BindingFlags.FlattenHierarchy | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
// take some caution... they could change field name
// in the future!
if (textFieldInfo == null)
return null;
else
return textFieldInfo.GetValue(ctrl) as TextBox;
干杯
【讨论】:
以上是关于WinForms NumericUpDown:有没有办法阅读有关文本选择的信息?的主要内容,如果未能解决你的问题,请参考以下文章
winforms有没有好的免费的devexpress数据网格替代品? [关闭]
在numericUpDown更改事件中获取numericUpDown更改的值