
给你介绍两种方式
一种就是TextChanged事件,一种是依赖属性的回调方法。
效果如下:
XAML代码:
<StackPanel Orientation="Vertical"><TextBox Height="50" TextChanged="TextBox_TextChanged"/>
<TextBox x:Name="txt1" Height="50" Text="{Binding MyText,UpdateSourceTrigger=PropertyChanged}"/>
</StackPanel>
C#代码:
public partial class MainWindow : Window{
public MainWindow()
{
InitializeComponent();
thisDataContext = this;
}
/// <summary>
/// 方式1,事件方法
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
{
int i = 0;
if (intTryParse((((TextBox)sender)Text), out i))
{
if (((TextBox)sender)Text != iToString())
{
((TextBox)sender)Text = iToString();
((TextBox)sender)SelectionStart = iToString()Length;
}
}
}
/// <summary>
/// 方式2,依赖属性方法
/// </summary>
public string MyText
{
get { return (string)GetValue(MyTextProperty); }
set { SetValue(MyTextProperty, value); }
}
public static readonly DependencyProperty MyTextProperty =
DependencyPropertyRegister("MyText", typeof(string), typeof(MainWindow), new PropertyMetadata("1",new PropertyChangedCallback((d,e)=>((MainWindow)d)PropertyChanged())));
private void PropertyChanged()
{
int i = 0;
if (intTryParse(MyText, out i))
{
if (MyText != iToString())
{
//用Dispatcher处理刷新
thisDispatcherBeginInvoke(new Action(delegate
{
MyText = iToString();
txt1SelectionStart = iToString()Length;
}));
}
}
}
}
文本框内容发生改变触发的事件。c#textbox的textchanged事件的作用是文本框内容发生改变。当文本框中的内容发生改变时,就会触发这个该事件,每输入一次字符,就会触发一次事件。
在第一次触发textchanged事件时,执行了textbox1TextChanged -= new EventHandler(textbox_TextChanged);
于是textchanged事件被删除了,这个时候textboxText = "1" ,没有触发changed事件,接着又添加了这个事件。按照这个流程,text永远等于1。任何想要改变text的值的行为都会触发changed事件,一旦触发,text就等于1
你想判断 文本框值是否 发生变化吧?
你增加一个 <input type=hidden value=textbox 的值 />
当提交时或者 触发 textbox的 onfocus 属性时 判断 hidden值和 textbox的值 是否相同
textbox 有个属性是 onkeydown 是 每次输入字符时 触发
你写个js方法 每当输入时 执行 方法
比如后台代码直接写textbook1Focus=True,让textbook1获得当前焦点。
TextBox 控件
1、主要属性:
(1)Text属性:Text属性是文本框最重要的属性,因为要显示的文本就包含在Text属性中。默认情况下,
最多可在一个文本框中输入2048个字符。如果将MultiLine属性设置为true,则最多可输入32KB 的文本。
Text属性可以在设计时使用属性窗口设置,也可以在运行时用代码设置或者通过用户输入来设置。可
以在运行时通过读取Text属性来获得文本框的当前内容。
(2)MaxLength 属性:用来设置文本框允许输入字符的最大长度,该属性值为 0 时,不限制输入的字符
数。
(3)MultiLine 属性:用来设置文本框中的文本是否可以输入多行并以多行显示。值为 true 时,允许多行
显示。值为false时不允许多行显示,一旦文本超过文本框宽度时,超过部分不显示。
(4)HideSelection属性:用来决定当焦点离开文本框后,选中的文本是否还以选中的方式显示,值为true,
则不以选中的方式显示,值为 false将依旧以选中的方式显示。
(5)ReadOnly属性:用来获取或设置一个值,该值指示文本框中的文本是否为只读。值为 true时为只读,
值为 false时可读可写。
(6)PasswordChar 属性:是一个字符串类型,允许设置一个字符,运行程序时,将输入到 Text 的内容全
部显示为该属性值,从而起到保密作用,通常用来输入口令或密码。
(7) ScrollBars属性: 用来设置滚动条模式, 有四种选择: ScrollBarsNone (无滚动条), ScrollBarsHorizontal
(水平滚动条),ScrollBarsVertical(垂直滚动条),ScrollBarsBoth(水平和垂直滚动条)。
注意:只有当MultiLine属性为true时,该属性值才有效。在WordWrap属性值为true时,
水平滚动条将不起作用
(8)SelectionLength属性:用来获取或设置文本框中选定的字符数。只能在代码中使用,值为0 时,表示
未选中任何字符。
(9)SelectionStart属性:用来获取或设置文本框中选定的文本起始点。只能在代码中使用,第一个字符的
位置为0,第二个字符的位置为1,依此类推。
(10)SelectedText 属性:用来获取或设置一个字符串,该字符串指示控件中当前选定的文本。只能在代
码中使用。
(11)Lines:该属性是一个数组属性,用来获取或设置文本框控件中的文本行。即文本框中的每一行存放
在 Lines数组的一个元素中。
(12)Modified:用来获取或设置一个值,该值指示自创建文本框控件或上次设置该控件的内容后,用户
是否修改了该控件的内容。值为true表示修改过,值为 false表示没有修改过。
(13)TextLength属性:用来获取控件中文本的长度。
(14)WordWrap:用来指示多行文本框控件在输入的字符超过一行宽度时是否自动换行到下一行的开始,
值为 true,表示自动换到下一行的开始,值为false表示不自动换到下一行的开始。
2、常用方法:
(1)AppendText方法:把一个字符串添加到文件框中文本的后面,调用的一般格式如下:
文本框对象AppendText(str)
参数 str是要添加的字符串。
(2)Clear方法:从文本框控件中清除所有文本。调用的一般格式如下:
文本框对象Clear()该方法无参数。
(3)Focus方法:是为文本框设置焦点。如果焦点设置成功,值为 true,否则为false。调用的一般格式如
下:
文本框对象Focus()该方法无参数。
(4)Copy方法:将文本框中的当前选定内容复制到剪贴板上。调用的一般格式如下:
文本框对象Copy()该方法无参数。
(5)Cut方法:将文本框中的当前选定内容移动到剪贴板上。调用的一般格式如下:
文本框对象Cut()该方法无参数。
(6)Paste方法:用剪贴板的内容替换文本框中的当前选定内容。调用的一般格式如下:
文本框对象Paste()该方法无参数。
(7)Undo 方法:撤销文本框中的上一个编辑 *** 作。调用的一般格式如下:
文本框对象Undo()该方法无参数。
(8)ClearUndo方法:从该文本框的撤销缓冲区中清除关于最近 *** 作的信息,根据应用
程序的状态,可以使用此方法防止重复执行撤销 *** 作。调用的一般格式如下:
文本框对象ClearUndo()该方法无参数。
(9)Select方法:用来在文本框中设置选定文本。调用的一般格式如下:
文本框对象Select(start,length)
该方法有两个参数,第一个参数start用来设定文本框中当前选定文本的第一个字符的位
置,第二个参数length用来设定要选择的字符数。
(10)SelectAll方法:用来选定文本框中的所有文本。调用的一般格式如下:
文本框对象SelectAll()该方法无参数。
3、常用事件:
(1)GotFocus事件:该事件在文本框接收焦点时发生。
(2)LostFocus事件:该事件在文本框失去焦点时发生。
(3)TextChanged事件:该事件在Text属性值更改时发生。无论是通过编程修改还是用户交互更改文本框的 Text属性值,均会引发此事件。
即使Static,如果程序没有问题,也不会执行两次,所以你的代码肯定有问题,把代码发上来吧。
如下是我按照你的思路随便写的测试,你可以COPY过去。
public partial class Form1 : Form
{
public static TextBox TB = new TextBox();
public Form1()
{
InitializeComponent();
TBTextChanged += new EventHandler(TB_TextChanged);
Form Form2 = new Form();
Form2Load += new EventHandler(Form2_Load);
Button B = new Button();
BClick += new EventHandler(B_Click);
Form2ControlsAdd(B);
Form2Show();
}
void B_Click(object sender, EventArgs e)
{
TBText = "CHANGE";
}
void Form2_Load(object sender, EventArgs e)
{
TBText = "TEXT";
}
void TB_TextChanged(object sender, EventArgs e)
{
MessageBoxShow(TBText);
}
}
此外,向窗体传值不要用这种麻烦方法。譬如你需要在FORM2中向FOMR1传值。
1)简单的方法就是直接把FORM1当做参数写在FOMR2的构造函数里面,这样你在FORM2中就可以随便调用FOMR的属性和方法了。当然,这要求他俩必须在同一个线程之中。
2)如果这两个窗体不在同一个线程之中,你需要通过事件来传递。按照正常的线程间通过事件传递参数的方法就可以,百度搜一下到处都是。
3)如果这两个窗体不在同一个进程之中,你需要在FORM2中使用API函数FindWindow等来获得FOMR1的HWND然后使用另一个WINAPI函数SendMessage来发送消息,然后重载Form1的WndProc(ref Message m)来处理消息
可能你还是个新手吧,一般你多用的为按钮,直接双击,就会生成事件,遇到这种文本框,并不是双击的,就没有头绪了。
很简单,先找到你的界面,然后把
属性
的这个窗体调出来,如果没有找到,点击
工具栏上面的
试图
->
属性窗口(快捷键:Crtl+w+p)
调出来后,选择你界面中想要生成的文本框,单击一下,选择它,边上的属性就出来了,在你属性窗体上
有一个闪电的符号,那个叫事件,里面有textchanged这个事件,双击这个事件的名称,它会帮你自动生成。
在这个事件里面写messagebox。
说完
OK!
以上就是关于WPF 文本框changed事件 急!!!!全部的内容,包括:WPF 文本框changed事件 急!!!!、c#textbox的textchanged事件的作用、textbox_TextChanged事件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)