问题标签 [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.

0 投票
6 回答
32841 浏览

c# - 如何使事件回调进入我的 win 表单线程安全?

当您从表单中订阅对象上的事件时,您实际上是将回调方法的控制权交给了事件源。您不知道该事件源是否会选择在不同的线程上触发事件。

问题是,当调用回调时,您不能假设可以在表单上创建更新控件,因为有时如果在与运行表单的线程不同的线程上调用事件回调,这些控件会引发异常。

0 投票
4 回答
8997 浏览

winforms - 如何以编程方式迭代数据网格行?

经过多年的 Web 开发,我突然回到了 WinForms,并且在一些应该很简单的事情上遇到了麻烦。我有一个ArrayList绑定到 Windows Forms 的业务对象DataGrid。我希望用户能够编辑单元格,完成后,按保存按钮。那时我想迭代 中的所有行和列 DataGrid以查找任何更改,并将它们保存到数据库中。但我找不到访问DataGrid行的方法。

我还想实时验证单个单元格,因为它们已被编辑,但我很确定可以做到。(也许不是用 an ArrayListas the DataSource?)但至于迭代DataGrid,我很惊讶它似乎不可能。

为了使用数据网格,我真的必须将我的业务对象数据填充到数据表中吗?

0 投票
17 回答
175365 浏览

c# - 在 Windows 窗体中访问另一个窗体上的控件的最佳方法是什么?

首先,这是关于使用 Windows 窗体的桌面应用程序的问题,而不是ASP.NET问题。

我需要与其他表单上的控件进行交互。我正在尝试使用例如以下内容来访问控件...

它不像我期望的那样工作。我最终从Main. 但是,如果我制作控件public而不是private,则可以直接访问它们,因此...

但这是最好的方法吗?在其他形式上进行控制是否public被视为“最佳实践”?是否有“更好”的方式来访问另一个表单上的控件?

进一步说明:

这实际上是对我提出的另一个问题的一种跟进,在 C# 中创建“树视图首选项对话框”类型的界面的最佳方法是什么?. 我得到的答案非常好,解决了我在保持 UI 简洁和易于在运行时和设计时使用方面遇到的许多组织问题。然而,它确实提出了容易控制界面其他方面的一个琐碎问题。

基本上,我有一个根表单,它实例化了位于根表单面板中的许多其他表单。因此,例如,其中一个子表单上的单选按钮可能需要更改主根表单上状态条图标的状态。在这种情况下,我需要子表单与父(根)表单的状态条中的控件对话。(我希望这是有道理的,而不是以“谁先上”的方式。)

0 投票
5 回答
42336 浏览

c# - Windows 窗体应用程序中的 HTML 编辑器

我们正在为我们的 windows 应用程序(vb.net 或 c#)寻找一个所见即所得的编辑器控件,以便用户可以在发送之前设计 HTML 电子邮件(使用 .net 框架中的 SMTP 对象发送)。

目前,我们可以找到的所有可用编辑器都存在以下问题之一:

  1. 它们依赖于 mshtml.dll 或 Web 浏览器控件,这对我们来说是不可靠的,因为 HTML 代码和编辑器在 windows 2000 (IE6) 下不同步

  2. 它们是基于 Web 的,而不是 Windows 窗体控件

  3. 他们将样式放在文档的头部(见下面的注释)

不幸的是,正如这篇HTML 电子邮件文章所描述的,使 HTML 电子邮件与样式一起使用的唯一可靠方法是内联使用它们,现在许多编辑器似乎不支持这种方法。

有没有人有这方面的经验或可以提出解决方案?

0 投票
11 回答
30696 浏览

c# - 在 Windows 窗体设计器中加载窗体时出现“找不到类型”错误

我有一个 .NET 2.0 windows 窗体应用程序,它大量使用了ListView控件。

我已经将该类子ListView类化为一个模板SortableListView<T>类,因此它可以更智能地显示事物并自行排序。

不幸的是,这似乎破坏了 VS2005 和 2008 中的 Visual Studio Forms Designer。

该程序编译并运行良好,但是当我尝试在设计器中查看拥有表单时,出现以下错误:

  • 找不到类型“MyApp.Controls.SortableListView”。请确保引用了包含此类型的程序集。如果此类型是您的开发项目的一部分,请确保该项目已成功构建。

没有可用于此错误的堆栈跟踪或错误行信息

  • 变量“listViewImages”要么未声明,要么从未分配。

在 MyApp.Main.Designer.cs 行:XYZ 列:1

有问题的代码行是它实际添加到表单的位置,并且是

listViewImages 被声明为

并在方法中实例化InitializeComponent如下:

如前所述,程序编译和运行完美,我尝试将SortableListView类移出单独的程序集,以便可以单独编译,但这没有什么区别。

我不知道从这里去哪里。任何帮助,将不胜感激!

0 投票
3 回答
4541 浏览

c# - Compact Framework/Threading - 选择选项后,MessageBox 显示在其他控件之上

我正在开发一个应用程序,该应用程序可以从外部服务器获取并安装大量更新,并且需要一些线程方面的帮助。用户遵循这个过程:

  • 点击按钮
  • 方法检查更新,返回计数。
  • 如果大于 0,则询问用户是否要使用 MessageBox.Show() 进行安装。
  • 如果是,它会运行一个循环并在每次更新的 run() 方法上调用 BeginInvoke() 以在后台运行它。
  • 我的更新类有一些用于更新进度条等的事件。

进度条更新很好,但 MessageBox 没有从屏幕上完全清除,因为更新循环在用户单击是后立即开始(见下面的屏幕截图)。

  • 我应该怎么做才能使消息框在更新循环开始之前立即消失?
  • 我应该使用线程而不是 BeginInvoke() 吗?
  • 我应该在单独的线程上进行初始更新检查并从该线程调用 MessageBox.Show() 吗?

代码

截屏

Windows 移动错误

0 投票
7 回答
7869 浏览

winforms - 在 WinForms 中,为什么不能从其他线程更新 UI 控件?

我确信这有一个很好的(或至少体面的)理由。它是什么?

0 投票
5 回答
14713 浏览

c# - 如何仅在您的应用中禁用 WebBrowser 的“点击声音”

有问题的“点击声音”实际上是系统范围的偏好,所以我只希望在我的应用程序有焦点时禁用它,然后在应用程序关闭/失去焦点时重新启用。

本来我想在stackoverflow上问这个问题,但是我还没有进入beta版。因此,在谷歌搜索答案并仅找到一点点信息后,我想出了以下内容,并决定将其发布在这里,因为我处于测试阶段。

然后在主窗体中,我们在这 3 个事件中使用上述代码:

  • 活性
  • 停用
  • 表格关闭

    /li>

我目前看到的一个问题是,如果程序崩溃,他们在重新启动我的应用程序之前不会有点击声音,但他们不知道这样做。

你们有什么感想?这是一个好的解决方案吗?可以做哪些改进?

0 投票
2 回答
2927 浏览

c# - 为什么调用 AzMan 时出现“无法更新密码”错误?

我正在企业库中的 AzMan 授权提供程序的帮助下从 WinForms 应用程序进行授权检查,并且收到以下错误:

无法更新密码。作为当前密码提供的值不正确。(来自 HRESULT 的异常:0x8007052B)(Microsoft.Practices.EnterpriseLibrary.Security.AzMan)


无法更新密码。作为当前密码提供的值不正确。(来自 HRESULT 的异常:0x8007052B)(Microsoft.Interop.Security.AzRoles)

AzMan 商店托管在同一域中另一台计算机上的 ADAM 中。其他电脑和用户没有这个问题。进行调用的用户具有对 ADAM 和 AzMan 存储的读取权限。运行 WinForms 应用程序的计算机和运行 ADAM 的计算机都在 Windows XP SP2 上。

在解决之前我遇到过 AzMan 的访问问题,但这是一个新问题……我错过了什么?

0 投票
6 回答
4111 浏览

c# - 面向未来的大型 UI 应用程序 - 带有 2008 功能包的 MFC,还是 C# 和 Winforms?

我的公司开发了一个长期使用的产品,它使用 Visual C++ 中的 MFC 作为 UI 开发的事实标准。我们的代码库包含大量必须保持可操作的遗留/过时代码。其中一些代码比我更老(最初是在 70 年代后期编写的),我们团队的一些成员仍在使用 Visual Studio 6。

然而,值得庆幸的是,内部得出的结论是,与竞争对手的产品相比,我们的产品看起来有些过时,需要做点什么。

我目前正在开发 UI 的一个新区域,该区域与产品的其余部分完全不同。因此,我有机会在 UI 其余部分的漫长过程开始之前尝试“新”技术堆栈作为一种试验场。

我在业余时间一直在使用 C# 与 Windows 窗体和 .net 框架并享受它,但有点担心互操作带来的头痛。虽然 UI 的这个特定分支不需要与传统 C++ 代码库进行太多互操作,但我可以预见这将成为未来的一个问题。

另一种方法是继续使用 MFC,但尝试利用 VS2008 附带的新功能包。我想这是最简单的选择,但我担心长寿而不是利用 .net 的优点......

那么,我该选哪个?我们是一个小团队,所以我的建议很可能会被接受为我们未来的发展方向——我想把它做好。

MFC死了吗?C#/Winforms 是前进的方向吗?还有什么我完全想念的吗?非常感谢帮助!