1

我将说明情况:

  1. 我的表单有一个列表视图、一个文本框和一个标签。

  2. 文本框是写一个目录路径来将该目录添加到listview中。

  3. 使用文本框的 OnTextchanged 事件,我在添加之前检查列表视图是否包含文本框文本,如果是,则标签显示“目录已在列表视图中”,如果不是,则标签显示其他内容。

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

然后为了解决这个小问题,我在将文本添加到 listviewx 后刷新了文本框的文本,我用我为此制作的一个小片段来做到这一点:

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

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

4

3 回答 3

2

TextChanged在不实际更改TextUpdatedRefresh方法主要处理刷新控件的绘图的情况下,确实没有一种本地方法来引发事件。但是,如果这是您需要添加到其他 TextBoxes 的内容,您可以尝试制作一个Extension method,或者您可以将一个 Handler 添加到您的 TextBox 的 Invalidated Event 中。

使用无效事件

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;

        }
    }
}
于 2013-06-29T18:47:24.140 回答
1

我不完全理解第四步,但看看下面的代码

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
于 2013-06-29T18:09:07.973 回答
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

希望这可以帮助

于 2013-06-29T17:03:06.683 回答