我会解释一下情况:
我的表单包含列表视图,文本框和标签。
Textbox是写一个目录路径,将该目录添加到listview。
使用文本框的OnTextchanged事件,我在添加文本框之前检查列表视图是否包含文本框文本,如果是,则标签显示“目录已经在列表视图中”,如果没有则标签另有说法。
现在,在将文本框中的目录路径添加到列表视图后,就像我在将文本添加到列表视图后没有修改文本框文本那样,文本框的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
但是我认为这是一种做菜的方式,我想知道是否存在一种本地方法来刷新我需要文本框的文本,就像在该片段中看到的那样,我尝试过一些方法作为“刷新“,”无效“等等......但没有一样。
答案 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)
在没有实际更改TextChanged
,Text
和Updated
方法的情况下,确实没有本地方式来提升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;
}
}
}