Tag: winforms

内部控件上的“跨线程操作无效”exception

我一直在努力解决这个问题:我有一个function,旨在将控件添加到具有跨线程处理的面板,问题是虽然面板和控件在“InvokeRequired = false” – 我得到一个exception告诉我其中一个控件内部控件是从其创建的线程以外的线程访问的,该代码片段如下所示: public delegate void AddControlToPanelDlgt(Panel panel, Control ctrl); public void AddControlToPanel(Panel panel, Control ctrl) { if (panel.InvokeRequired) { panel.Invoke(new AddControlToPanelDlgt(AddControlToPanel),panel,ctrl); return; } if (ctrl.InvokeRequired) { ctrl.Invoke(new AddControlToPanelDlgt(AddControlToPanel),panel,ctrl); return; } panel.Controls.Add(ctrl); //<– here is where the exception is raised } exception消息如下: “跨线程操作无效:控制’pnlFoo’从其创建的线程以外的线程访问” (’pnlFoo’在ctrl.Controls下) 如何将ctrl添加到面板?! 当代码到达“panel.Controls.Add(ctrl);”时 line – panel和ctrl“InvokeRequired”属性设置为false,问题是ctrl中的控件将“InvokeRequired”设置为true。 澄清事情:在基本线程上创建“panel”,在新线程上创建“ctrl”,因此,必须调用“panel”(导致“ctrl”再次需要调用)。 一旦完成两个调用,它就会到达panel.Controls.Add(ctrl)命令(“panel”和“ctrl”都不需要在这种状态下调用) 这是完整程序的一小部分: public […]

如何在WinForms中手动获取Graphics对象的实例?

我知道如何使用Graphics类型的对象(至少我能够渲染图像)但我总是通过传递从OnPaint方法检索的图形对象来做到这一点。 我想在应用程序打开时显示一个图像(即在Form_Load方法中),但不知道如何获取我可以使用的Graphics对象的实例? 谢谢

如何删除ListViewItem上的选择边框

我正在使用SetWindowTheme和SendMessage使.net listview看起来像vista样式列表视图,但.net控件仍然在所选项目周围有一个虚线选择边框: 资源管理器列表视图中的选定项目周围没有该边框。 我该如何删除它? Windows资源管理器: 编辑:解决方案: public static int MAKELONG(int wLow, int wHigh) { int low = (int)LOWORD(wLow); short high = LOWORD(wHigh); int product = 0x00010000 * (int)high; int makeLong = (int)(low | product); return makeLong; } SendMessage(olv.Handle, WM_CHANGEUISTATE, Program.MAKELONG(UIS_SET, UISF_HIDEFOCUS), 0);

更新PropertyGrid

当SelectedObject属性中的对象发生更改时,如何自动更新属性网格? 我已经尝试在我的类中实现INotifyPropertyChanged但是属性网格实际上并没有在后台显示对象的新属性,直到我点击它。 我已经尝试直接订阅我的对象的PropertyChanged事件,并在调用它时调用PropertyGrid的Refresh()方法。 但是我的一些房产是相关的。 更改一个属性的含义可能会引发多个PropertyChanged事件。 这似乎工作正常,但我仍然想知道是否有更简洁的方法通过DataBinding这样做。 此外,我还想避免在用户仅更新单个属性后多次使用控件Refresh。 那么有没有办法让PropertyGrid从PropertyChanged事件中刷新?

C#:我如何减去两个日期?

这是我的代码: DateTime date1 = new DateTime(byear, bmonth, bday, 0, 0, 0); DateTime datenow = DateTime.Now; DateTime date2 = datenow – date1 在最后一行,我收到此错误: 错误1无法将类型’System.TimeSpan’隐式转换为’System.DateTime’ 如何减去两个日期?

参数varbinary数据类型中的空值

如何在参数varbinary数据类型中添加空值? 当我执行以下代码时: using (SqlConnection myDatabaseConnection1 = new SqlConnection(myConnectionString.ConnectionString)) { using (SqlCommand mySqlCommand = new SqlCommand(“INSERT INTO Employee(EmpName, Image) Values(@EmpName, @Image)”, myDatabaseConnection1)) { mySqlCommand.Parameters.AddWithValue(“@EmpName”, textBoxEmpName.Text); mySqlCommand.Parameters.AddWithValue(“@Image”, DBNull.Value); myDatabaseConnection1.Open(); mySqlCommand.ExecuteNonQuery(); } } 我得到以下System.Data.SqlClient.SqlException : 不允许从数据类型nvarchar到varbinary(max)的隐式转换。 使用CONVERT函数运行此查询。

动态面板元素添加和滚动条

我写了一个函数来动态地向“面板”添加元素。 public int State; public Point Point = new Point(0, 0); public void DialogAdd(string message, string author) { var d = new DialogMessage(); if(State == 0) { d.BackColor = Color.FromArgb(255, 237, 241, 245); State = 1; } else { State = 0; } d.Controls[“name”].Text = author; d.Location = new Point(0, Point.Y); d.Controls[“msg”].Text = message; Point.Y […]

坎布里亚数学大上下缘

我想在winforms文本框中显示一些数学表达式。 因此我认为“Cambria Math”字体是一个不错的选择,但由于字体的顶部和底部边缘较高,文本看起来很奇怪。 首先,我认为我犯了一个错误,但根据这个问题 ,这是字体的正确行为。 为什么Cambria Math具有这些大的边距值?如何在Word 2010等文本框中正确显示我的字符串? (请注意,我只对排版有所了解;) 编辑:我必须使文本框高,否则插入符号将是不可见的。 文本框的字体大小设置为8.25pt

停止在C#中调试事件

当应用程序关闭时,如何或在何处运行命令,即使是调试停止? 我需要在任何出口执行命令,即使用户是开发人员并单击Visual Studio上的“停止调试”按钮。 我尝试着 Application.ApplicationExit += new EventHandler(this.OnApplicationExit); 但它不起作用。 也许我错了或不是活动。 我正在使用Winforms而不是,在Form Close上不能成为事件。 我正在使用Visual Studio 2005 Net Framework 2.0(按客户端要求),但仅供参考。 也许我可以改写这个吗?: public static void Exit();

如何在C#中正确关闭winforms应用程序?

我从调试文件夹中运行了我的程序的.exe。 它工作正常,但当我关闭它时,我发现它仍然列在任务管理器的进程列表中。 我想我一定忘记了一步,因为这是我的第一个winforms计划。