江苏优化网站关键词信息产业部网站备案

当前位置: 首页 > news >正文

江苏优化网站关键词,信息产业部网站备案,wordpress导航栏跟随,哪个软件做网站好一种方法是使用事件#xff08;包括MVVM的绑定#xff09; ComboBox TextBoxBase.TextChangedComboBox_TextChanged / 然而运行时就会发现#xff0c;这个事件在疯狂的触发#xff0c;很频繁 在实际应用中#xff0c;如果关联查询数据库#xff0…一种方法是使用事件包括MVVM的绑定 ComboBox TextBoxBase.TextChangedComboBox_TextChanged / 然而运行时就会发现这个事件在疯狂的触发很频繁 在实际应用中如果关联查询数据库网络吞吐什么的就会卡顿 另一种方法是使用IsTextSearchEnabled属性在文本框敲键盘会自动选择相关项 ComboBox IsTextSearchEnabledTrue IsTextSearchCaseSensitiveFalse TextSearch.TextPathName / 然而又有新的问题选择项不会显示到文本框文本框仍然是键盘敲的内容当然还可能跟Framework版本有关于是我们需要更深入 试验数据含 3 个项 ComboBox TextBoxBase.TextChangedComboBox_TextChangedComboBoxItem啊啊啊/ComboBoxItemComboBoxItem哦哦哦/ComboBoxItemComboBoxItem呃呃呃/ComboBoxItem/ComboBox 试验一绑定 TextChanged 和 SelectionChanged 调试 private void Combobox_TextChanged(object sender, TextChangedEventArgs e){// e.OriginalSource TextBox, e.Source sender Comboboxvar tb e.OriginalSource as TextBox;var cb e.Source as ComboBox;var cs e.Changes.ToArray();int alen -1, offs -1, rlen -1;if (cs.Length 0) { alen cs[0].AddedLength; offs cs[0].Offset; rlen cs[0].RemovedLength; }var str1 TextSearch.GetText(cmbStudios);System.Diagnostics.Debug.Print(\(TextBox.Text{tb.Text},ComboBox.Text{cb.Text},TextSearch.Text{str1},Action{e.UndoAction}, Changes{cs.Length}: [0]{{{alen},{offs},{rlen}}}\r\n);}private void Combobox_SelectionChanged(object sender, SelectionChangedEventArgs e){var cb e.Source as ComboBox;System.Diagnostics.Debug.Print(\)ComboBox.Text{cb.Text},SelectedItem{cb.SelectedItem}\r\n);}记录 TextBox.Texta,ComboBox.Text,TextSearch.Text,ActionCreate, Changes1: [0]{1,0,0} TextBox.Text啊,ComboBox.Text啊,TextSearch.Text,ActionCreate, Changes1: [0]{1,0,1} TextBox.Text啊,ComboBox.Text啊,TextSearch.Text,ActionNone, Changes0: [0]{-1,-1,-1} TextBox.Text啊,ComboBox.Text啊,TextSearch.Text,ActionCreate, Changes1: [0]{1,0,1} ComboBox.Text啊,SelectedItem啊啊啊 TextBox.Text啊啊啊,ComboBox.Text啊啊啊,TextSearch.Text,ActionCreate, Changes1: [0]{3,0,1} 也就是选择项目正常设置Text属性但是现在我们要让Text改变自动选择项目 试验二启用IsTextSearchEnabled属性 TextBox.Texta,ComboBox.Text,TextSearch.Text,ActionCreate, Changes1: [0]{1,0,0} ComboBox.Text,SelectedItem啊啊啊 TextBox.Text啊,ComboBox.Text啊啊啊,TextSearch.Text,ActionCreate, Changes1: [0]{1,0,1} TextBox.Text啊,ComboBox.Text啊,TextSearch.Text,ActionNone, Changes0: [0]{-1,-1,-1} TextBox.Text啊,ComboBox.Text啊,TextSearch.Text,ActionCreate, Changes1: [0]{1,0,1} TextBox.Text啊,ComboBox.Text啊,TextSearch.Text,ActionCreate, Changes1: [0]{1,0,1} 敲a一次空格变成“啊”自动选择“啊啊啊”项目然后就开始抽完全看不到适当的介入时机 用过Win10的都知道文件夹右上角的搜索框能在输入法完成后才开始搜索所以一定是可以实现的 换网查英文资料发现Win11中有TextCompositionEnded事件但是WPF中找不到类似的TextCompositionManager外挂 实验三启用TextComposition事件 TextBox TextCompositionManager.TextInputStartTextBox_TextInputStart TextCompositionManager.TextInputUpdateTextBox_TextInputUpdate TextCompositionManager.TextInputTextBox_TextInput / 事件响应代码 private void TextBox_TextInputStart(object sender, TextCompositionEventArgs e){var tc e.TextComposition;string text \( CompositionText{tc.CompositionText},ControlText{tc.ControlText},ControlText{tc.SystemText},Text{tc.Text} ;System.Diagnostics.Debug.Print(\)TextInputStart() ControlText{e.ControlText},SystemText{e.SystemText},Text{e.Text},TextComposition{{{text}}}\r\n);}private void TextBox_TextInputUpdate(object sender, TextCompositionEventArgs e){var tc e.TextComposition;string text \( CompositionText{tc.CompositionText},ControlText{tc.ControlText},ControlText{tc.SystemText},Text{tc.Text} ;System.Diagnostics.Debug.Print(\)TextInputUpdate() ControlText{e.ControlText},SystemText{e.SystemText},Text{e.Text},TextComposition{{{text}}}\r\n);}private void TextBox_TextInput(object sender, TextCompositionEventArgs e){var tc e.TextComposition;string text \( CompositionText{tc.CompositionText},ControlText{tc.ControlText},ControlText{tc.SystemText},Text{tc.Text} ;System.Diagnostics.Debug.Print(\)TextInput() ControlText{e.ControlText},SystemText{e.SystemText},Text{e.Text},TextComposition{{{text}}}\r\n);}记录 TextInputStart() ControlText,SystemText,Text,TextComposition{ CompositionText,ControlText,ControlText,Text } TextInputUpdate() ControlText,SystemText,Text,TextComposition{ CompositionTexta,ControlText,ControlText,Text } TextInputUpdate() ControlText,SystemText,Text,TextComposition{ CompositionText啊,ControlText,ControlText,Text }没有TextInput事件 英文资料显示会依次触发 TextCompositionStarted、TextChanging、TextChanged、TextCompositionChanged、TextCompositionEnded 事件 思考是隧道事件的问题 如上面提到的外挂WPF中的控件其实都外挂的而且还可以自己给现有的类添加属性、方法和事件参考Binding Property 由于可以任意的排布所有的控件因此事件的响应与传统的MFC控件就开始有差异 如图如果鼠标点在2上传统的事件会由2响应容器1对此一无所知 这有什么问题有没有问题就看你怎么看问题。 所谓路由事件是把响应规则扩展为3类 1.直接事件等同传统事件 2.冒泡事件从內向外依次触发直到Handled被设置 3.隧道事件从外向内依次触发直到Handled被设置这样容器就有机会在内部控件之前做出响应事件一般以Preview开头常见的如多个带滚动条的控件互相包含 试验四加入Preview事件 PreviewTextInputStart() ControlText,SystemText,Text,TextComposition{ CompositionText,ControlText,ControlText,Text } TextInputStart() ControlText,SystemText,Text,TextComposition{ CompositionText,ControlText,ControlText,Text } PreviewTextInputUpdate() ControlText,SystemText,Text,TextComposition{ CompositionTexta,ControlText,ControlText,Text } TextInputUpdate() ControlText,SystemText,Text,TextComposition{ CompositionTexta,ControlText,ControlText,Text } PreviewTextInputUpdate() ControlText,SystemText,Text,TextComposition{ CompositionText啊,ControlText,ControlText,Text } TextInputUpdate() ControlText,SystemText,Text,TextComposition{ CompositionText啊,ControlText,ControlText,Text } PreviewTextInput() ControlText,SystemText,Text啊,TextComposition{ CompositionText,ControlText,ControlText,Text啊 }所有的都可以不管只看PreviewTextInput检查Text属性就是输入法敲出完整的文本时 策略响应的也就简单了 1.加入一个Timer 2.在TextInput事件启动计时器其它如Start和Update时停止计时器 3.计时器响应执行过滤逻辑然后停止计时器 当然这是Windows文件搜索框的逻辑也就是你敲键盘很快的话中途不会执行搜索你也可以根据需要进行调整比如Start也开始计时器如果Update过一段时间未触发一样执行逻辑