Tag: winforms

Winforms中的相对路径

C#中的相对路径对我来说很复杂。 在一种情况下,我将一组Texture2d对象处理到我的应用程序,它获取文件名并使用它来定位文件并将纹理加载到Image对象中。 然后,我从存储在类文件中的相对路径加载图像,并使用需要相对于Content / gfx的相对路径。 但如果我不加载这些纹理,这些相对路径将失败。 我怎么能认为我的相对路径不会失败? 在Web工作中,所有rel路径都是相对于我们正在处理的文件所在的文件夹,我可以这样设置它并将所有rel路径设置为我的应用程序所在的根文件夹吗?

如何允许用户编辑ListBox中的项目?

我想创建一个ListBox控件,允许用户编辑项目,如Launchy中的扩展名列表框。 在WinForms中这可能吗? 我尝试在该列表框中使用自动窗口信息,它显示为QWidget(可能与Qt相关)。

BackgroundWorker OnWorkCompleted抛出跨线程exception

我有一个简单的UserControl用于数据库分页,它使用控制器来执行实际的DAL调用。 我使用BackgroundWorker来执行繁重的工作,并在OnWorkCompleted事件上重新启用一些按钮,更改TextBox.Text属性并为父窗体引发事件。 表单A保存我的UserControl。 当我点击打开表单B的某个按钮时,即使我没有做任何“那里”并且只是关闭它,并尝试从我的数据库引入下一页, OnWorkCompleted会在工作线程上调用(而不是我的主线程),并抛出一个跨线程exception。 目前我在那里的处理程序中添加了对InvokeRequired的检查,但是不是要在主线程上调用OnWorkCompleted的全部内容吗? 为什么不按预期工作? 编辑: 我设法将问题缩小到arcgis和BackgroundWorker 。 我有以下解决方案,它向arcmap添加一个命令,打开一个带有两个按钮的简单Form1 。 第一个按钮运行一个hibernate500毫秒的BackgroundWorker并更新计数器。 在RunWorkerCompleted方法中,它检查InvokeRequired ,并更新标题以显示方法最初在主线程或工作线程内运行。 第二个按钮只打开Form2 ,它什么都不包含。 首先,所有对RunWorkerCompletedare的调用都是在主线程内完成的(正如预期的那样 – 这就是RunWorkerComplete方法的最后一点,至少我从BackgroundWorker上的MSDN中了解到的) 打开和关闭Form2 ,始终在工作线程上调用RunWorkerCompleted 。 我想补充一点,我可以将此解决方案保留原样(在RunWorkerCompleted方法中检查InvokeRequired ),但我想了解为什么它会违背我的期望。 在我的“真实”代码中,我想知道在主线程上调用RunWorkerCompleted方法。 我设法在form.Show(); 我的BackgroundTesterBtn命令 – 如果我使用ShowDialog() ,我没有问题( RunWorkerCompleted总是在主线程上运行)。 我需要在我的ArcMap项目中使用Show() ,这样用户就不会绑定到表单了。 我还尝试在正常的WinForms项目上重现该错误。 我添加了一个简单的项目,只打开没有ArcMap的第一个表单,但在这种情况下我无法重现该错误 – RunWorkerCompleted在主线程上运行,无论我在打开Form2之前和之后使用Show()或ShowDialog() 。 我尝试在Form1之前添加第三个表单作为主表单,但它没有改变结果。 这是我的简单sln(VS2005sp1) – 它需要 ESRI.ArcGIS.ADF(9.2.4.1420) ESRI.ArcGIS.ArcMapUI(9.2.3.1380) ESRI.ArcGIS.SystemUI(9.2.3.1380)

如何检测mp3文件何时播放完毕

我的c#windows窗体可以播放mp3文件。我是用这个代码做的 WMPLib.WindowsMediaPlayer wplayer; wplayer = new WMPLib.WindowsMediaPlayer(); wplayer.URL = “c:/Standup.mp3”; wplayer.controls.play(); 这很好用,但我想知道文件何时完成播放,以便我可以重新启动它。 请问我该怎么做?

窗体在Windows 8上显示错误的大小 – 如何获得实际大小?

在Windows 8上将表单边框样式设置为Sizable的WinForms表单, DesktopBounds属性DesktopBounds正确的值: 相反,当具有FixedDialog的表单边框样式时,值是错误的: 在Windows XP上,值始终是正确的: 我的问题是: 如何获得一个窗口的实际大小,包括完整的非客户区域? 更新1: 似乎它与这个SO问题有关 。 我会试着看看这是否能在这里解决我的问题。 更新2: 为了完整起见,以下是VMware Windows 7的结果: 更新3: 最后找到了一个解决方案,它涉及将DwmGetWindowAttribute函数与DWMWA_EXTENDED_FRAME_BOUNDS值一起使用。 我将在下面发布一个答案。

WebBrowser控件抛出看似随机的NullReferenceException

几天后,我正在开发基于WebBrowser的webscraper。 在使用Threads和DocumentCompleted事件的几个原型之后,我决定尝试看看我是否可以创建一个简单易懂的Webscraper。 目标是创建一个不涉及实际Thread对象的Webscraper。 我希望它按顺序步骤工作(即转到url,执行操作,转到其他url等等)。 这是我到目前为止所得到的: public static class Webscraper { private static WebBrowser _wb; public static string URL; //WebBrowser objects have to run in Single Thread Appartment for some reason. [STAThread] public static void Init_Browser() { _wb = new WebBrowser(); } public static void Navigate_And_Wait(string url) { //Navigate to a specific url. _wb.Navigate(url); //Wait till […]

水晶报告| 印刷| 默认打印机

我正在创建一个应用程序,用户将打印我使用Crystal Report显示的发票。 用户向我展示了他目前使用ForPro制作的应用程序。 在该应用程序中,在“打印机选项”窗体下,可以看到当前安装的所有打印机,用户可以选择默认打印机。 发票开始后,用户按下打印按钮,然后有一个对话框询问否。 的副本。 输入后,发票直接打印,没有任何打印对话框。 如果用户想要再次更换打印机,他/她将在“打印机选项”表单中更改它。 我想知道Crystal Report中是否有类似的东西,并且需要有关如何处理它的指导。

如何从DataGrid for Windows Form Application中的选定行获取值?

标题非常明显。 我有一个Windows窗体应用程序的DataGrid,我希望能够存储所选行的值。 这样做最简单的方法是什么? 我在搜索中发现这段代码作为示例,但在DataGrid的排序方式不同时不起作用: private void grdPatients_CurrentCellChanged(object sender, EventArgs e) { int row = grdPatients.CurrentRowIndex; grdPatients.Select(row); ArrayList arrayList = new ArrayList(); for (int i = 0; i < 3; i++) { arrayList.Insert(i, (patientsDS.Tables["PatientList"].Rows[row].ItemArray.GetValue(i))); } textBox1.Text = "" + arrayList[0]; textBox2.Text = "" + arrayList[1]; textBox3.Text = "" + arrayList[2]; }

如何使用c#在标签上显示更新时间作为系统时间?

我想使用C#在标签上显示当前时间,但随着系统时间的变化,时间会不断变化。 我怎样才能做到这一点?

WinFormmultithreading。 是否使用backgroundWorker?

我有一个简单的应用程序,它触发了一系列数据密集型任务。 我对WinForms不是很有经验,我想知道在不锁定界面的情况下最好的方法。 可以重复使用backgroundWorker,还是有其他方法可以做到这一点? 谢谢