【问题标题】:Substring text of a textbox and datetime picker to a maskbox文本框和日期时间选择器的子字符串文本到掩码框
【发布时间】:2016-06-11 22:57:05
【问题描述】:

输入所有内容后,我使用按钮生成永久代码。 像这样:

mskCodePer.Text =
    txtNom.Text.Substring(0, 3) +    
    txtPrenom.Text.Substring(0, 1) + 
    dptNaisc.Text.Substring(8, 2) + 
    dptNaisc.Text.Substring(4, 4) + 
    dptNaisc.Text.Substring(2, 3);

但是我的老师强迫我以一种在我打字时自动发生的方式来做,但我不明白怎么做。

我尝试编写 textchanged 事件,但每次我只输入一个字母时,它就会崩溃并告诉我已生成 ArgumentOutOfRangeException。

【问题讨论】:

  • 使用 textchanged 事件是对的,但是您没有添加对mskCodePer.Text 长度的检查。

标签: c# winforms substring


【解决方案1】:

您必须为这些文本框处理 TextChanged 事件。

maskbox 文本更新代码分隔在一个单独的方法中,并为每个TextBox 文本更改调用此函数/方法。

public void UpdateMask()
{
    mskCodePer.Text =
    (txtNom.Text!=null && txtNom.Text.Length > 2)? txtNom.Text.Substring(0, 3): string.Empty +
    (txtPrenom.Text!=null && txtPrenom.Text.Length > 0)? txtPrenom.Text.Substring(0, 1): string.Empty +    
    (dptNaisc.Text!=null && dptNaisc.Text.Length > 9)? dptNaisc.Text.Substring(8, 2): string.Empty +    
    (dptNaisc.Text!=null && dptNaisc.Text.Length > 7)? dptNaisc.Text.Substring(4, 4): string.Empty +    
    (dptNaisc.Text!=null && dptNaisc.Text.Length > 5)? dptNaisc.Text.Substring(2, 3): string.Empty ;    
}


// keep below logic in form_load or relevant event.

txtNom.TextChanged += (s,e) => {UpdateMask();}
txtPrenom.TextChanged += (s,e) => {UpdateMask();}
dptNaisc.TextChanged += (s,e) => {UpdateMask();}

【讨论】:

    猜你喜欢
    • 2012-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多