关于wpf问题,如何优化以下代码?

zwycaogen 2016-12-19 03:07:04
描述:有三个textbox,逻辑代码都是一样,只是textbox的x:Name不一样,我不想重复三次逻辑代码,请问如何优化一下?
...全文
213 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
如果要只写一遍,看你的设计的复杂程度而定。如果只是面对某类对象的“扩展”,你可以使用 .net 的扩展方法机制来为对象类型增加几个方法。如果是高级的扩展,那么你就应该自定义用户控件,来封装和组合任意的子控件。
D56233577 2016-12-20
  • 打赏
  • 举报
回复
就是根据Button找对应TextBox的问题? 随便写几种方式,由于不知道你具体需求,可能不一定适合你: 1. 定义一个类,将TextBox和Button关联到一起; 2. WPF控件都有个Tag属性,你可以写字符串对TextBox分组,然后用Linq去查询; 3. 如果Button只和对应的TextBox在同一个容器下,可以查询容器下所有的TextBox。
zwycaogen 2016-12-20
  • 打赏
  • 举报
回复
引用 12 楼 duanzi_peng 的回复:
这不是什么WPF问题,这就是后台逻辑如何写的问题。
我知道,但也与wpf有关系,要与wpf界面交互
  • 打赏
  • 举报
回复
这不是什么WPF问题,这就是后台逻辑如何写的问题。
  • 打赏
  • 举报
回复
引用 10 楼 zwycaogen 的回复:
[quote=引用 7 楼 duanzi_peng 的回复:] [quote=引用 4 楼 zwycaogen 的回复:] [quote=引用 3 楼 duanzi_peng 的回复:] [quote=引用 2 楼 zwycaogen 的回复:] [quote=引用 1 楼 duanzi_peng 的回复:] 后台for 循环 遍历添加呀,类似: for(int i=0;i<3;i++){ TextBox tb = new TextBox(); tb.Name="Name"+i; tb.KeyUp +=事件名称 // 添加到父容器 xx.Children.Add(tb); }
但是我的textbox已经有了[/quote] 有了你就把事情写成后台的同一个[/quote] 但是三个事件每个事件都会各自调用一种textbox,就只有x:Name不同而已,写成一个事件后怎么区分textbox[/quote] 通过sender 来区分,意为“发送者”,将它转为TextBox ,类似: TextBox tb = sender as TextBox; 使用If来判断Name即可,类似: if(tb==null) return; if(tb.Name=="xxx"){ // TODO: } else if(tb.Name="xxxx"){ // TODO: }[/quote] 这样不行,一个按钮对应一个textbox,name为textbox1,第二个按钮对应第二个textbox,name为textbox2,以此类推,点击一个按钮获取对应的textbox,它们就只有textbox的name不同,而且name是有规律的(textbox1、textbox2...)[/quote] 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
zwycaogen 2016-12-19
  • 打赏
  • 举报
回复
引用 7 楼 duanzi_peng 的回复:
[quote=引用 4 楼 zwycaogen 的回复:] [quote=引用 3 楼 duanzi_peng 的回复:] [quote=引用 2 楼 zwycaogen 的回复:] [quote=引用 1 楼 duanzi_peng 的回复:] 后台for 循环 遍历添加呀,类似: for(int i=0;i<3;i++){ TextBox tb = new TextBox(); tb.Name="Name"+i; tb.KeyUp +=事件名称 // 添加到父容器 xx.Children.Add(tb); }
但是我的textbox已经有了[/quote] 有了你就把事情写成后台的同一个[/quote] 但是三个事件每个事件都会各自调用一种textbox,就只有x:Name不同而已,写成一个事件后怎么区分textbox[/quote] 通过sender 来区分,意为“发送者”,将它转为TextBox ,类似: TextBox tb = sender as TextBox; 使用If来判断Name即可,类似: if(tb==null) return; if(tb.Name=="xxx"){ // TODO: } else if(tb.Name="xxxx"){ // TODO: }[/quote] 这样不行,一个按钮对应一个textbox,name为textbox1,第二个按钮对应第二个textbox,name为textbox2,以此类推,点击一个按钮获取对应的textbox,它们就只有textbox的name不同,而且name是有规律的(textbox1、textbox2...)
zwycaogen 2016-12-19
  • 打赏
  • 举报
回复
引用 6 楼 Libby1984 的回复:
你可以把你的逻辑写成一个函数,而将textbox作为函数的参数传进来,需要哪个textbox就传哪个。
引用 6 楼 Libby1984 的回复:
你可以把你的逻辑写成一个函数,而将textbox作为函数的参数传进来,需要哪个textbox就传哪个。
不能,我这里只是举个简单例子,实际是7、8个textbox,而且这只是一个按钮所对应的,有三个按钮,总共有20几个不同的textbox,但是他们都是有规律的
zwycaogen 2016-12-19
  • 打赏
  • 举报
回复
引用 5 楼 Libby1984 的回复:
你逻辑代码是什么样的,事件怎么调用textbox的??
就是调用textbox1.Text、textbox2.Text、textbox3.Text,这就只是textbox的x:Name不同而已
  • 打赏
  • 举报
回复
引用 4 楼 zwycaogen 的回复:
[quote=引用 3 楼 duanzi_peng 的回复:] [quote=引用 2 楼 zwycaogen 的回复:] [quote=引用 1 楼 duanzi_peng 的回复:] 后台for 循环 遍历添加呀,类似: for(int i=0;i<3;i++){ TextBox tb = new TextBox(); tb.Name="Name"+i; tb.KeyUp +=事件名称 // 添加到父容器 xx.Children.Add(tb); }
但是我的textbox已经有了[/quote] 有了你就把事情写成后台的同一个[/quote] 但是三个事件每个事件都会各自调用一种textbox,就只有x:Name不同而已,写成一个事件后怎么区分textbox[/quote] 通过sender 来区分,意为“发送者”,将它转为TextBox ,类似: TextBox tb = sender as TextBox; 使用If来判断Name即可,类似: if(tb==null) return; if(tb.Name=="xxx"){ // TODO: } else if(tb.Name="xxxx"){ // TODO: }
  • 打赏
  • 举报
回复
你可以把你的逻辑写成一个函数,而将textbox作为函数的参数传进来,需要哪个textbox就传哪个。
  • 打赏
  • 举报
回复
你逻辑代码是什么样的,事件怎么调用textbox的??
zwycaogen 2016-12-19
  • 打赏
  • 举报
回复
引用 3 楼 duanzi_peng 的回复:
[quote=引用 2 楼 zwycaogen 的回复:] [quote=引用 1 楼 duanzi_peng 的回复:] 后台for 循环 遍历添加呀,类似: for(int i=0;i<3;i++){ TextBox tb = new TextBox(); tb.Name="Name"+i; tb.KeyUp +=事件名称 // 添加到父容器 xx.Children.Add(tb); }
但是我的textbox已经有了[/quote] 有了你就把事情写成后台的同一个[/quote] 但是三个事件每个事件都会各自调用一种textbox,就只有x:Name不同而已,写成一个事件后怎么区分textbox
  • 打赏
  • 举报
回复
引用 2 楼 zwycaogen 的回复:
[quote=引用 1 楼 duanzi_peng 的回复:] 后台for 循环 遍历添加呀,类似: for(int i=0;i<3;i++){ TextBox tb = new TextBox(); tb.Name="Name"+i; tb.KeyUp +=事件名称 // 添加到父容器 xx.Children.Add(tb); }
但是我的textbox已经有了[/quote] 有了你就把事情写成后台的同一个
zwycaogen 2016-12-19
  • 打赏
  • 举报
回复
引用 1 楼 duanzi_peng 的回复:
后台for 循环 遍历添加呀,类似: for(int i=0;i<3;i++){ TextBox tb = new TextBox(); tb.Name="Name"+i; tb.KeyUp +=事件名称 // 添加到父容器 xx.Children.Add(tb); }
但是我的textbox已经有了
  • 打赏
  • 举报
回复
后台for 循环 遍历添加呀,类似: for(int i=0;i<3;i++){ TextBox tb = new TextBox(); tb.Name="Name"+i; tb.KeyUp +=事件名称 // 添加到父容器 xx.Children.Add(tb); }

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧