问题标签 [winforms]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
WinForms ComboBox 数据绑定陷阱
假设您正在执行以下操作
所以现在我们有 2 个组合框绑定到该数组,一切正常。但是,当您更改一个组合框的值时,它会将两个组合框更改为您刚刚选择的那个。
现在,我知道数组总是通过引用传递(当我学习 C:D 时才知道),但是为什么组合框会一起改变呢?我根本不相信组合框控件正在修改集合。
作为一种解决方法,这不会实现预期/期望的功能
在 C# WinForms 应用程序中显示 Flash 内容
在C# WinForms 应用程序中显示Flash
内容的最佳方式是什么?我想创建一个能够显示图像和 Flash 内容的用户控件(类似于 current )。PictureBox
能够从各种流而不是磁盘上的文件加载闪存内容会很棒。
查找在上下文菜单下单击的节点
如何找出树列表中的哪个节点已激活上下文菜单?例如,右键单击一个节点并从菜单中选择一个选项。
我不能使用 TreeViews 的SelectedNode
属性,因为该节点只是被右键单击而没有被选中。
winforms控制的全局异常处理
在处理 ASP.NET 1.1 项目时,我总是使用 Global.asax 来捕获所有错误。我正在寻找一种类似的方法来捕获 Windows 窗体用户控件中的所有异常,该控件最终成为托管的 IE 控件。做这样的事情的正确方法是什么?
我应该如何从屏幕空间坐标转换为 WinForms PictureBox 中的图像空间坐标?
PictureBox
我有一个在 Windows 窗体控件中显示图像的应用程序。SizeMode
控件的 设置为,以便Zoom
包含在 中的图像PictureBox
将以正确的方式显示,而不管PictureBox
.
这对于应用程序的视觉外观非常有用,因为您可以根据需要调整窗口大小,并且图像将始终以最适合的方式显示。不幸的是,我还需要处理图片框上的鼠标单击事件,并且需要能够从屏幕空间坐标转换为图像空间坐标。
看起来很容易从屏幕空间转换到控制空间,但我没有看到任何明显的从控制空间转换到图像空间的方法(即在图片框中已缩放的源图像中的像素坐标)。
有没有一种简单的方法可以做到这一点,或者我应该复制他们在内部使用的缩放数学来定位图像并自己进行翻译?
可以“分拆”几个 GUI 线程吗?(不会在 Application.Run 中停止系统)
我的目标
我想要一个主处理线程(非 GUI),并且能够根据需要在自己的后台线程中分离 GUI,并让我的主非 GUI 线程继续工作。换句话说,我希望我的主要非 GUI 线程成为 GUI 线程的所有者,反之亦然。我不确定这甚至可以使用 Windows 窗体(?)
背景
我有一个基于组件的系统,其中控制器动态加载程序集并实例化和运行实现IComponent
具有单个方法的通用接口的类DoStuff()
。
加载哪些组件是通过 xml 配置文件和添加包含不同实现的新程序集来配置的IComponent
。组件向主应用程序提供实用功能。虽然主程序正在做它的事情,例如控制核电站,但组件可能正在执行实用任务(在它们自己的线程中),例如清理数据库,发送电子邮件,在打印机上打印有趣的笑话,你有什么。我想要的是让这些组件中的一个能够显示 GUI,例如带有所述电子邮件发送组件的状态信息。
整个系统的生命周期是这样的
- 应用程序启动。
- 检查配置文件以加载要加载的组件。加载它们。
- 对于每个组件,运行
DoStuff()
以对其进行初始化,并使其在自己的线程中过上自己的生活。 - 继续做主要的应用程序,永远的工作之王。
如果组件在DoStuff()
. 它只是停止,直到 GUI 关闭。直到关闭 GUI,程序才会进入第 4 点。
如果允许这些组件启动它们自己的 Windows 窗体 GUI,那就太好了。
问题
当组件尝试在其中启动 GUI 时DoStuff()
(确切的代码行是组件运行时Application.Run(theForm)
),组件以及因此我们的系统在该行“挂起”,Application.Run()
直到 GUI 关闭。好吧,正如预期的那样,刚刚启动的 GUI 工作正常。
组件示例。一个与 GUI 无关,而第二个打开一个可爱的窗口,里面有粉红色的毛茸茸的兔子。
我试过这个没有运气。即使我尝试在它自己的线程中启动 GUI,执行也会停止,直到 GUI 关闭。
是否可以分拆 GUI 并在之后返回Application.Run()
?
如何使控件看起来像启用了 Visual Styles 的 ComboBox?
我有一个以ComboBox为模型的控件。我想渲染控件,使控件边框看起来像标准的Windows ComboBox。具体来说,我遵循了 MSDN 文档,并且控件的所有呈现都是正确的,除了在禁用控件时呈现。
需要明确的是,这适用于启用了视觉样式的系统。此外,控件的所有部分都正确呈现,但禁用控件周围的边框与禁用的ComboBox 边框颜色不匹配。
我正在使用VisualStyleRenderer类。MSDN 建议使用ComboBox控件的TextBox部分的VisualStyleElement.TextBox
元素,但标准禁用TextBox和标准禁用ComboBox的绘制略有不同(一个具有浅灰色边框,另一个具有浅蓝色边框)。
如何在禁用状态下正确呈现控件?
如何使按钮看起来好像被按下?
使用 VS2008、C#、.Net 2 和 Winforms 如何使常规按钮看起来“按下”?想象一下这个按钮是一个开/关开关。
ToolStripButton
具有 Checked 属性,但常规 Button 没有。
打印 Winform/视觉元素
我通过谷歌找到的所有文章要么已经过时,要么相互矛盾。
在 c# 中打印表单或丰富文本框的最简单方法是什么?我认为它PrintDiaglog
通过设置来使用类Document
,但是如何转换呢?
我应该为表单上的公共/受保护组件提供访问器方法/Getter Setter 吗?
如果我有一个带有组件/对象(例如我需要从父窗体或其他窗体访问的文本框)的 .Net 窗体,我显然需要将此组件的修饰符“升级”为内部或公共级别的变量。
现在,如果我在我的表单类中提供一个 int 或 string 类型等的公共变量,我不会三思而后行地使用 Getters 和(也许)Setters,即使他们没有做任何事情,只是提供直接访问变量。
但是,VS 设计器似乎没有为那些作为表单组件的公共对象实现此类 Getter/Setter(因此不符合良好的编程习惯)。
所以,问题是;为了做“正确的事情”,我应该将此类 VS 设计器组件或对象包装在 Getter 和/或 Setter 中吗?