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

zwycaogen 2016-12-19 03:07:04
描述:有三个textbox,逻辑代码都是一样,只是textbox的x:Name不一样,我不想重复三次逻辑代码,请问如何优化一下?
...全文
206 15 打赏 收藏 转发到动态 举报
写回复
用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界面交互
exception92 2016-12-19
  • 打赏
  • 举报
回复
这不是什么WPF问题,这就是后台逻辑如何写的问题。
exception92 2016-12-19
  • 打赏
  • 举报
回复
引用 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不同而已
exception92 2016-12-19
  • 打赏
  • 举报
回复
引用 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
exception92 2016-12-19
  • 打赏
  • 举报
回复
引用 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已经有了
exception92 2016-12-19
  • 打赏
  • 举报
回复
后台for 循环 遍历添加呀,类似: for(int i=0;i<3;i++){ TextBox tb = new TextBox(); tb.Name="Name"+i; tb.KeyUp +=事件名称 // 添加到父容器 xx.Children.Add(tb); }
ModernUI(http://mui.codeplex.com/)是一个开源的WPF界面库,利用该界面库,我们可以创建很酷的应用程序。下面是ModernUI官方示例,你可以从官方网站直接下载源码运行,如果是.NET 4.0的话,记得要声明“NET4”预编译变量,否则无法编译通过。 这个界面框架是基于ModernUI来实现的,在该文我将分享所有的源码,并详细描述如何基于ModernUI来构造一个非常通用的、插件化的WPF开发框架。下载源码的同志,希望点击一下推荐。 本文将按照以下四点来介绍: (1)ModernUI简介; (2)构建通用界面框架的思路; (3)基于ModernUI和OSGi.NET的插件化界面框架实现原理及源码分析; (4)其它更有趣的东西~~。 要编写这样的WPF界面,我们需要在一个Window上声明菜单和Tab页面,下图是定义菜单的声明。 此外,每一个Tab风格页面,你也需要手动的为菜单创建这样的界面元素。 直接用这样的方式来使用ModernUI,显然不太适合团队协作性的并行开发,因为在一个团队的协作中,不同的人需要完成不同的功能,实现不同页面,每个人都需要来更改主界面。 我非常希望模块化的开发方法,因为这可以尽可能的复用现有资产,使程序员可以聚焦在自己关注的业务逻辑上,不需要关心UI的使用。下面,我将来描述基于ModernUI实现的一个通用界面框架,这个界面框架允许程序员在自己的业务模块中配置需要显示的界面元素。 通用界面框架实现思路: 我希望能够实现这样的通用界面框架: (1)程序员可以直接实现需要展现业务逻辑的界面,不需要关注如何使用ModernUI; (2)程序员可以通过简单的配置就可以将自己实现的业务逻辑页面显示在主界面中; (3)这个界面框架可以完全复用。 当我看到ModernUI这个界面库时,我希望将应用程序做成模块化,每一个模块能够: (1)通过以下配置能够直接显示二级菜单。 (2)通过以下配置能够直接显示三级菜单。 这样做的好处是,开发插件的时候可以不需要关心界面框架插件;团队在协作开发应用的时候,可以独立开发并不需要修改主界面;团队成员的插件可以随时集成到这个主界面;当主界面无法满足我们的布局时或者用户需求无法满足时,可以直接替换主界面框架而不需要修改任何插件代码。 最终的效果如下,以下界面的几个菜单及点击菜单显示的内容由DemoPlugin插件、DemoPlugin2插件来提供。当插件框架加载更多插件时,界面上会出现更多的菜单;反之,当插件被卸载或者被停止时,则相应的菜单将消失掉。

110,545

社区成员

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

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

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