winform中如何控制一个textbox,输入身份证的时候只能是半角,如果是全角的话输入值怎样切换成半角字符?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了winform中如何控制一个textbox,输入身份证的时候只能是半角,如果是全角的话输入值怎样切换成半角字符?相关的知识,希望对你有一定的参考价值。

在KeyPress事件中这样实现,只能控制数字类型为半角,但是字母还是没控制。
if (e.KeyChar >= 65296 && e.KeyChar <= 65305)

e.KeyChar -= Convert.ToChar(65248);

你可以直接限制不允许输入全角字符
在KeyPress中
e.Handled = true
if((e.KeyChar>='0' &&e.KeyChar<='9')||(e.KeyChar>='a' &&e.KeyChar<='z'))
e.Handled = false;

只要在判断里面输入的是半角就,textbox就只能接收到半角字符
参考技术A /// <summary> 转半角的函数(DBC case) </summary>
/// <param name="input">任意字符串</param>
/// <returns>半角字符串</returns>
///<remarks>
///全角空格为12288,半角空格为32
///其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248
///</remarks>
public static string ToDBC(string input)

    char[] c=input.ToCharArray();
    for (int i = 0; i < c.Length; i++)
    
        if (c[i]==12288)
        
            c[i]= (char)32;
            continue;
        
        if (c[i]>65280 && c[i]<65375)
            c[i]=(char)(c[i]-65248);
    
    return new string(c);

字母数字皆可.

如何从 WinForms 中的 TextBox 中移除焦点?

【中文标题】如何从 WinForms 中的 TextBox 中移除焦点?【英文标题】:How to remove the focus from a TextBox in WinForms? 【发布时间】:2010-11-11 12:48:03 【问题描述】:

我需要从几个 TextBox 中移除焦点。我尝试使用:

textBox1.Focused = false;

它的ReadOnly 属性值为true

然后我尝试将焦点设置在表单上,​​以便将其从所有 TextBoxes 中删除,但这也不起作用:

this.Focus();

当一个文本框被选中时,函数返回false

那么,如何从 TextBox 中移除焦点?

【问题讨论】:

【参考方案1】:

您需要一些其他可聚焦的控件来将焦点移到。

请注意,您可以将焦点设置为标签。您可能需要考虑下一步要将 [Tab] 键放在哪里。

另请注意,您不能将其设置为表单。像 Form 和 Panel 这样的容器控件会将焦点传递给它们的第一个子控件。这可能是您希望它远离的 TextBox。

【讨论】:

谢谢;我只是尝试关注一个标签,现在文本框变得没有焦点。由于某种原因,您似乎无法专注于表单。 容器控件(窗体、面板)会将焦点传递给它们的第一个子控件。 很好的建议。这解决了我的问题。我对表单本身使用 KeyPress 并有几个按钮等。问题是应用程序正在从读卡器获取输入,所以如果焦点从表单本身移开,那么所有的地狱都会崩溃。单击按钮后专注于标签解决了我的问题。非常感谢!【参考方案2】:

专注于标签对我不起作用,像 label1.Focus() 这样的事情对吗? 加载表单时文本框仍然有焦点,但是尝试Velociraptors 回答,为我工作,将 Form 的 Active 控件设置为这样的标签:

private void Form1_Load(object sender, EventArgs e)  
 
    this.ActiveControl = label1;       

【讨论】:

我希望我能给你百万箭头。我尝试了人们建议的所有其他方法,这是唯一有效的方法。出于某种原因,文本框总是偷走一切的焦点...... 这也适用于面板等容器控件。我只是想完全消除焦点并且它起作用了:this.ActiveControl = panelOnMyForm;【参考方案3】:

您可以添加以下代码:

this.ActiveControl = null;  //this = form

【讨论】:

我相信这是最好的答案。如果您阅读 MSDN,许多其他方法(例如“Focus”)被列为控件设计人员的低级方法。如果您希望“不选择”其他所有内容,这似乎是最简单的方法,因为它只是一小行。 这可能是微软最初添加此属性的一半原因。 这似乎是最优雅的解决方案,在我的情况下效果很好。 我真的希望这个答案能够工作,因为它看起来应该,但在我的情况下它不起作用,因为虽然它确实触发了 Leave 事件,但它没有触发 Validating/Validated 事件。 这当然是最简单最有效的解决方案。您可以将此行添加到 Form 的 Activated 事件中,并防止子文本框自动选择所有文本。【参考方案4】:

尝试禁用和启用文本框。

【讨论】:

这个工作非常巧妙,因为它会同时自动选择选项卡列表中的下一个控件。 我正在使用 MVVM 在 Silverlight 中进行开发,并使用针对 TextBox 的行为来实现这一点。因为我没有另一个方便的 UIElement 来将焦点设置为禁用/启用解决方案,所以效果很好。谢谢! 如何禁用它? @miguelmpn textBox1.Enabled = false; 将禁用您的文本框。并将其设置为true 将重新启用它。【参考方案5】:

你也可以将表单activecontrol属性设置为nulllike

ActiveControl = null;

【讨论】:

我希望人们一直向下滚动到这里,不要只使用标记为答案的解决方法 今天仍然是最好的答案,哥们,请接受我的投票。【参考方案6】:

Focus 设置输入焦点,因此将其设置为表单将不起作用,因为表单不接受输入。尝试将表单的ActiveControl 属性设置为不同的控件。您还可以使用Select 选择特定控件或使用SelectNextControl 选择标签顺序中的下一个控件。

【讨论】:

在这里尝试了所有其他方法,Select() 为我工作。【参考方案7】:

试试这个:

首先设置 Tab 键顺序。

然后在表单加载事件中,我们可以以编程方式向应用程序发送 Tab 键按下。这样该应用程序就会将焦点放在 Tab 键顺序中的第一个控件上。

在表单加载中甚至写下这一行。

SendKeys.Send("TAB");

这确实对我有用。

【讨论】:

【参考方案8】:

这篇文章引导我这样做:

ActiveControl = null;

这使我可以在顶层捕获所有键盘输入,而其他控件不会发疯。

【讨论】:

【参考方案9】:

一个简单的解决方案是取消焦点,只需创建自己的类:

public class ViewOnlyTextBox : System.Windows.Forms.TextBox 
    // constants for the message sending
    const int WM_SETFOCUS = 0x0007;
    const int WM_KILLFOCUS = 0x0008;

    protected override void WndProc(ref Message m) 
        if(m.Msg == WM_SETFOCUS) m.Msg = WM_KILLFOCUS;

        base.WndProc (ref m);
    

【讨论】:

正是我正在寻找的那种解决方案。谢谢!【参考方案10】:

我找到了一个不错的选择!它最适合我,无需将重点放在其他事情上。

试试看:

private void richTextBox_KeyDown(object sender, KeyEventArgs e)
    
    e.SuppressKeyPress = true;

【讨论】:

【参考方案11】:

我在自定义控件上做了这个,我在 onFocus() 上做了这个

this.Parent.Focus();

因此,如果 texbox 聚焦 - 它会立即聚焦 textbox 父级(表单或面板...) 如果您想在自定义控件上进行此操作,这是一个不错的选择。

【讨论】:

【参考方案12】:

看来我不必将焦点设置在任何其他元素上。在 Windows Phone 7 应用程序中,我一直在使用 Focus 方法来取消设置文本框的焦点。

给出以下命令会将焦点设置为空:

void SearchBox_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)

    if (e.Key == Key.Enter)
    
        Focus();
    

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.focus.aspx

它对我有用,但我不知道为什么它对你不起作用:/

【讨论】:

【参考方案13】:
    //using System;
    //using System.Collections.Generic;
    //using System.Linq;

    private void Form1_Load(object sender, EventArgs e)
    
        FocusOnOtherControl(Controls.Cast<Control>(), button1);
    

    private void FocusOnOtherControl<T>(IEnumerable<T> controls, Control focusOnMe) where T : Control
    
        foreach (var control in controls)
        
            if (control.GetType().Equals(typeof(TextBox)))
            
                control.TabStop = false;
                control.LostFocus += new EventHandler((object sender, EventArgs e) =>
                                     
                    focusOnMe.Focus();
                );
            
        
    

【讨论】:

【参考方案14】:

你可以试试:

textBox1.Enable = false;

【讨论】:

【参考方案15】:

我解决它的方法是放置我所有的 winform 控件。我将所有标签和非选择 winform 控件设置为 tab order 0,然后我的第一个控件作为 tab order 2,然后将每个可选控件的 order 增加 1,因此 3、4、5 等...

这样,当我的 Winforms 启动时,第一个 TextBox 没有焦点!

【讨论】:

【参考方案16】:

你可以通过两种方法做到这一点

只需将所需文本框的“TabStop”属性设置为 false,即使您有一个文本字段,它也不会聚焦

拖动两个文本框

    让一个你不想关注的文本框1可见 使第二个不可见并转到该文本字段的属性并选择

tabindex 值为 textbox2 的 0

    然后选择你的文本框1的tabindex到1 现在它不会专注于 textbox1

【讨论】:

【参考方案17】:

如果你想要的只是文本框在其内容中没有蓝色选择的视觉效果,只需不选择文本:

textBox_Log.SelectionStart = 0;
textBox_Log.SelectionLength = 0;
textBox_Log.Select();

之后,添加.Text += "..."的内容时,不会显示蓝色选择。

【讨论】:

【参考方案18】:

请尝试将TabStop 设置为False 用于未获得焦点的视图控件。

例如:

txtEmpID.TabStop = false;

【讨论】:

【参考方案19】:

使用 System.Windows.Input

Keyboard.ClearFocus();

【讨论】:

请不要只发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带有解释的答案通常更有帮助、质量更好,并且更有可能吸引投票。【参考方案20】:

2022 年的聚会有点晚了,但是这里没有一个解决方案对我有用(为什么)使用 .Net_6.0_windows,所以我想出了这个解决方案:

Label focusoutLabel = new Label()  
    Text = "",
    Name = "somegenericplaceholdernamethatwillneverbeusedinmyprogram",
    Visible = false,
;
this.Controls.Add(focusoutLabel);
this.ActiveControl = focusoutLabel;

^将此代码放入您的表单加载处理程序^

【讨论】:

【参考方案21】:

在Form或UserControl的构造函数中持有TextBox写

SetStyle(ControlStyles.Selectable, false);

在 InitializeComponent() 之后; 来源:https://***.com/a/4811938/5750078

例子:

public partial class Main : UserControl


    public Main()
    
        InitializeComponent();
        SetStyle(ControlStyles.Selectable, false);
    

【讨论】:

以上是关于winform中如何控制一个textbox,输入身份证的时候只能是半角,如果是全角的话输入值怎样切换成半角字符?的主要内容,如果未能解决你的问题,请参考以下文章

怎样在winform中控制textbox的大小

C# WinForm中,当验证一个textBox的输入内容,然后弹出提示信息,如下图: 请问各位大牛,如何实现?急!

c# 的WinForm 中 textbox内如何限制只输入为0-100之间的数字?

C#-WinForm-如何获取文本框(TextBox)中鼠标,光标位置

winForm窗体中实例化一个普通的类A,那我怎么在类A中写代码控制winForm里的例如TextBox控件呢?

怎样在winform中控制textbox的大小