问题标签 [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 投票
9 回答
35197 浏览

c# - 有什么方法可以自动化 Windows 窗体测试吗?

我熟悉用于业务层单元测试的 nunit,但是我现在正在寻找自动化 win 表单 gui 层的测试。

我已经看到了watin和 watin 记录器,用于通过访问控件并自动化它们来自动化 Web 应用程序的测试。但是,我正在努力为 Windows 窗体(用 c# 或 vb.net 编写)找到一个等效的 watin,最好是开源的。

是否存在一种或所有产品都基于记录鼠标和键盘按下?

更新:我看过这篇关于白色的博客文章,这似乎是我正在寻找的东西。博客文章提出了一些问题,但由于白色仅在 0.6 版中,这些问题可能会得到解决。如果其他人使用白色或任何其他进行比较,请感兴趣。

0 投票
1 回答
856 浏览

winforms - 用鼠标调整 Infragistics GanttChart 任务的大小

我将自定义加载DataTableUltraChart类型GanttChart中。

数据加载成功。您知道是否可以为图表中显示的任务添加对鼠标调整大小(拖动)的支持?我无法弄清楚Infragistics控件是否支持这一点。

0 投票
10 回答
93917 浏览

c# - 是否可以像 WebView 一样在 Windows 窗体中嵌入 Gecko 或 Webkit?

我很想知道是否有 Gecko.NET 之类的东西;)我的意思是,就像我们可以嵌入 WebView 一样,它是任何 Windows 窗体应用程序中的 IE7 的“实例”(并告诉它navigateto(fancy_url);)。我喜欢使用 Firefox 或 WebKit。

有人试过这个吗?

更新:请记住,虽然可以使用上述控件嵌入 Gecko,但在使用 Gecko 时仍然无法打印

2010 年 3 月更新:仍然无法使用 GeckoFX 进行本机打印,但是有几种方法可能就足够了,具体取决于您要执行的操作。请参阅:http ://geckofx.org/viewtopic.php?id=796了解更多信息。

2013 年 10 月更新:我不再进行 Windows 开发,所以我对此不感兴趣,但似乎 Gecko 的开发可以在这里找到:https ://bitbucket.org/geckofx ,它似乎最近更新了。将其留在这里以供将来的 Windows 开发人员使用;)

2017 年 1 月更新:我收到了来自一家名为TeamDev的公司的电子邮件。他们创建了一个名为“DotNetBrowser”的基于 Chromium 的 .NET 浏览器组件,可用于在 Windows 窗体应用程序中显示现代网页。

直接引用电子邮件:

以下是有关该组件的一些详细信息,可能会有所帮助:

  1. DotNetBrowser 基于 Chromium,因此支持 HTML5、CSS3、JS 和最新的 Web 标准。该库的底层 Chromium 版本会定期更新。
  2. 该组件适用于 WPF 以及 Windows 窗体桌面应用程序,并且适用于 C# 和 VB.NET。
  3. 该库已获得商业许可,但为开源和学术项目提供免费许可。

免责声明: 我没有使用此 DotNetBrowser,因为我不再进行 Windows 开发,但如果您正在寻找解决方案,可能值得检查。

0 投票
2 回答
3012 浏览

.net - 如何确保滚动条不与内容重叠?

在使用 .NET 和 WinForms 创建可滚动的用户控件时,我反复遇到过以下情况,例如,弹出垂直滚动条,与控件的内容重叠,导致还需要水平滚动条。理想情况下,内容会缩小一点,以便为垂直滚动条腾出空间。

我目前的解决方案是将我的控件保持在最右边的 40 像素之外,这样垂直滚动条就会占据上去。由于这仍然是控件的有效客户端空间,因此当水平滚动条被垂直滚动条覆盖时,它仍然会出现,即使根本没有隐藏任何控件。但是至少用户实际上不需要使用出现的水平滚动条。

有没有更好的方法来使这一切正常工作?有什么方法可以完全防止不需要和不需要的滚动条出现?

0 投票
3 回答
1694 浏览

.net - UITypeEditor 和 IExtenderProvider

我有一个扩展器 (IExtenderProvider),它使用附加属性扩展了某些类型的控件。对于这些属性之一,我编写了一个 UITypeEditor。到目前为止,一切正常。

扩展器本身也有几个属性,我试图将它们用作 UITypeEditor 的一种默认值。我想要做的是能够在扩展器本身(而不是扩展控件)上设置一个属性,并且当我为扩展控件上的一个附加属性打开 UITypeEditor 时,我想在UITypeEditor 为扩展器上的属性值。

一个简单的例子:ExtenderProvider 有一个属性 DefaultExtendedValue。在表单上,​​我将此属性的值设置为“我的值”。扩展控件通过提供程序具有带有 UITypeEditor 的属性 ExtendedValue。当我打开属性 ExtendedValue 的编辑器时,默认(初始)值应设置为“我的值”。

在我看来,执行此操作的最佳位置是 UITypeEditor.EditValue,就在调用 IWindowsFormsEditorService.DropDownControl 或 .ShowDialog 之前。

唯一的问题是我不能(或者我还没有发现如何)在 EditValue 中获取扩展器提供程序本身,以读取相关属性的值并将其设置在 UITypeEditor 中。上下文为我提供了扩展控制,但在这种情况下,这对我没有用。

有什么办法可以实现我正在尝试的吗?任何帮助表示赞赏!

谢谢汤姆


@samjudson:这不是一个坏主意,但不幸的是它并没有完全让我到达那里。我真的希望能够为扩展器提供程序的每个实例单独设置此默认值。(对于不同的扩展控件组,我可能在一个表单上有多个不同的值。)

0 投票
2 回答
2557 浏览

c# - WindowsForms和C#中控件的动态自上而下列表?

在我们的项目SharpWired中,我们试图创建一个类似于 Firefox 或 Safari 中的下载窗口的下载组件。也就是说,一个自上而下的下载列表,它是包含进度条、按钮等的自定义控件。

要求是应该有一个列表,每行有一个元素。每个元素都必须是自定义控件。整个列表应该是动态调整大小的,这样当你让它变长/变短时,列表会在需要时添加一个滚动条,当你使它变细/变宽时,自定义控件应该调整到列表的宽度。

我们已经尝试使用 aFlowLayoutPanel但尚未调整大小以按照我们想要的方式工作。最好我们只需要将自定义控件的锚定设置为左和右。我们也考虑过使用 aTableLayoutPanel但发现到目前为止动态添加行开销太大。

这一定是一个很常见的用例,对我来说似乎有点奇怪,FlowLayoutPanel没有直观的方法来做到这一点。有没有人做过类似的事情或有提示或技巧让我们开始?

干杯!
/亚当

0 投票
4 回答
12636 浏览

c# - 如何让 PictureBox 使用最近邻重采样?

我正在使用 StretchImage,因为该框可以通过拆分器调整大小。看起来默认是某种平滑的双线性过滤,导致我的图像模糊并有莫尔图案。

0 投票
1 回答
17725 浏览

.net - DoDragDrop 和 MouseUp

有没有一种简单的方法可以确保在拖放失败后,MouseUp 事件不会被框架吃掉和忽略?

我找到了一篇描述一种机制的博客文章,但它涉及大量手动记账,包括状态标志、MouseMove 事件、手动“鼠标离开”检查等。如果可以的话,我宁愿不必实现所有这些避免。

0 投票
3 回答
6574 浏览

c# - 停止任务栏闪烁

我知道我可以以编程方式使特定窗口的任务栏项目在某些情况发生变化时开始闪烁,但是有什么方法可以在一段时间后以编程方式阻止它闪烁,或者至少有一个键盘快捷键我可以给我的用户以某种方式停止闪烁?

0 投票
11 回答
235243 浏览

.net - Cannot access a disposed object - How to fix?

In a VB.NET WinForms project, I get an exception

Cannot access a disposed of object

when closing a form. It occurs very rarely and I cannot recreate it on demand. The stack trace looks like this:

The dbiSchedule is a schedule control from Dbi-tech. There is a timer on the form that updates the schedule on the screen every few minutes.

Any ideas what is causing the exception and how I might go about fixing it? or even just being able to recreate it on demand?


Hej! Thanks for all the answers. We do stop the Timer on the FormClosing event and we do check the IsDisposed property on the schedule component before using it in the Timer Tick event but it doesn't help.

It's a really annoying problem because if someone did come up with a solution that worked - I wouldn't be able to confirm the solution because I cannot recreate the problem manually.