刷新TextBox文本?

时间:2013-06-29 16:58:16

标签: .net vb.net winforms textbox

我会解释一下情况:

  1. 我的表单包含列表视图,文本框和标签。

  2. Textbox是写一个目录路径,将该目录添加到listview。

  3. 使用文本框的OnTextchanged事件,我在添加文本框之前检查列表视图是否包含文本框文本,如果是,则标签显示“目录已经在列表视图中”,如果没有则标签另有说法。

  4. 现在,在将文本框中的目录路径添加到列表视图后,就像我在将文本添加到列表视图后没有修改文本框文本那样,文本框的OnTextChanged事件不会被处理,因此标签是仍然说列表视图中的目录不是(因为未处理OnTextchanged事件)。

  5. 然后为了解决这个小问题,我在将文本添加到listviewx之后刷新了文本框的文本,我使用了我为此做的一小段代码:

    Private Sub Refresh_Textbox_Text(ByVal TextBox As TextBox)
        Dim TempText As String = TextBox.Text
        TextBox.Clear()
        TextBox.Text = TempText
    End Sub
    

    但是我认为这是一种做菜的方式,我想知道是否存在一种本地方法来刷新我需要文本框的文本,就像在该片段中看到的那样,我尝试过一些方法作为“刷新“,”无效“等等......但没有一样。

3 个答案:

答案 0 :(得分:1)

尝试插入Me.Refresh(),如此

Private Sub Refresh_Textbox_Text(ByVal TextBox As TextBox)

   Dim TempText As String = TextBox.Text
    TextBox.Clear()
    TextBox.Text = TempText
    Me.Refresh()
End Sub

希望这有帮助

答案 1 :(得分:1)

我完全不了解第4步,但请查看以下代码

Dim ListItems1 As New List(Of String)

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    Button1.Enabled = False
    Label1.Text = ""
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    ListItems1.Add(TextBox1.Text)
    ListView1.Items.Add(TextBox1.Text)
    Label1.Text = ""
    TextBox1.Text = ""
    TextBox1.Focus()
End Sub

Private Sub TextBox1_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBox1.TextChanged
    If TextBox1.Text.Length = 0 Then
        Button1.Enabled = False
    Else
        If ListItems1.Contains(TextBox1.Text) Then
            Label1.Text = "Directory is already in the listview"
            Button1.Enabled = False
        Else
            Label1.Text = "Directory is not in the listview"
            Button1.Enabled = True
        End If
    End If
End Sub

如果您不想存在按钮,请尝试以下

Dim ListItems1 As New List(Of String)

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    Label1.Text = ""
End Sub

Private Sub TextBox1_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBox1.TextChanged
    If TextBox1.Text.Length = 0 Then
        Label1.Text = ""
    Else
        If ListItems1.Contains(TextBox1.Text) Then
            Label1.Text = "Directory is already in the listview"
        Else
            Label1.Text = "Directory is not in the listview"
        End If
    End If
End Sub

Private Sub TextBox1_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
    If Asc(e.KeyChar) = 13 And ListItems1.Contains(TextBox1.Text) = False And TextBox1.Text.Length > 0 Then
        ListItems1.Add(TextBox1.Text)
        ListView1.Items.Add(TextBox1.Text)
        TextBox1.Text = ""
        Label1.Text = ""
    End If
End Sub

答案 2 :(得分:1)

在没有实际更改TextChangedTextUpdated方法的情况下,确实没有本地方式来提升Refresh事件,主要是刷新控制。但是,如果您需要添加到其他TextBox中,可以尝试创建Extension method,或者可以向TextBox的Invalidated Event添加Handler。

使用无效事件

void textBox1_Invalidated(object sender, InvalidateEventArgs e)
{
    textBox1_TextChanged(sender, new EventArgs());
}

扩展方法

我承认这可能有点过分......

快速而肮脏的例子:

using System;
using System.Windows.Forms;
using ExtensionMethods;
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            textBox1.RefreshCurrent();
        }
    }
}

namespace ExtensionMethods
{
    public static class MyExtensions
    {
        public static void RefreshCurrent( this TextBox tb)
        {
            string temp = tb.Text;
            tb.Text = "";
            tb.Text = temp;

        }
    }
}