Tag: winforms

如何在DevExpress GridView中更改行的背景颜色?

我的表单中有一个DevExpress GridView,由于布尔值,我需要更改一些颜色。 是什么属性允许我改变一行的背景色?

检测ListView滚动条何时到达WinForms的底部

我如何知道WinForms ListView滚动条到达底部的时间? 当发生这种情况时,我希望listview中填充更多数据(在我的案例中,这在理论上是无穷无尽的)。 OnScroll事件从顶部给我滚动值,但我无法知道用户是否可以进一步滚动。

快速显示/隐藏WinForms GUI C#的方法

我正在创建一个有线程的应用程序。 我将GUI(Announce:Form)作为单独的线程启动。 那个窗口非常简约,只有一个输入框和一个按钮。 在另一个线程上将运行Tcp客户端,当它从TcpServer获取信息时,它应该传递它进入该输入框并显示gui(和最顶层的窗口)。 几秒钟之后,gui应该隐藏自己并等待另一个tcp msg,依此类推。 public void setTextBox(string varText) { if (InvokeRequired) { textBox.BeginInvoke(new textBoxCallBack(setTextBox), new object[] {varText}); } else { textBox.Text = varText; } } 此代码用于从Tcp线程填充textBox。 现在唯一的问题是让窗口显示并正确隐藏。 一直在尝试许多解决方案,总是出现问题。 喜欢: private void windowStateChange(string varState) { if (InvokeRequired) { Invoke(new WindowStateChangeCallBack(windowStateChange), new object[] {varState}); } else { if (varState == “Hide”) { //Hide(); // TopMost […]

WinFormsmultithreading:仅在前一个更新完成后才执行GUI更新

我有multithreading应用程序和一些后台处理。 它具有长时间运行的UI更新 (在UI线程本身上),它们通过MSDN上的知名资源从后台线程调用。 我无法缩短这些UI更新,因为它们最终在外部库中完成(1)。 现在,从该后台线程, 我想在UI线程上异步调用(使用BeginInvoke() )这些更新,但前提是尚未完成上一次更新。 如果没有,我想简单地跳过此更新。 这将防止Windows消息队列溢出,以防调用比调用方法能够执行的速度快。 我目前的解决方案是:在UI线程上执行的方法中,我进入并退出ReaderWriterLockSlim实例。 在后台线程上,我尝试以零超时进入实例。 成功后,我调用’BeginInvoke()’然后再次退出。 如果不成功,我会完全跳过方法调用。 public void Update(double x, double y) { _updateLock.EnterWriteLock(); try { //…long running task… } finally { _updateLock.ExitWriteLock(); } } //…. void Provider_PositionChanged(object sender, SpecialEventArgs e) { if (_updateLock.TryEnterWriteLock(0)) //noone is currently executing an update? { try { myUiControl.BeginInvoke(/*…*/); } finally { _updateLock.ExitWriteLock(); […]

等待很长的过程并仍在更新UI

我一直在尝试创建一个写入数据库的任务,而不会阻塞UI线程。 我遇到的最大问题是等待该过程完成而不会发生阻塞。 我一直在努力避免使用DoEvents (虽然它现在经常通过这个程序使用,我想在前进时不再使用它)。 我试图创建进程以在第二个线程上运行并等待它完成以及使用BackgroundWorker 。 我遇到的问题不是代码在不同的线程中运行,而是试图找到一种等待它完成的方法。 基本上,现在我做以下事情: 连接到数据库 创建一个后台工作者(或线程)来写入数据库(我可能最终会使用BackgroundWorker所以我可以使用ReportProgress 启动线程或BackgroundWorker 使用While循环等待线程/ BackgroundWorker完成。 对于线程,我等待IsAlive变为false,对于BackgroundWorker ,我切换一个布尔变量。 我让用户知道过程已经完成。 问题在于#4。 执行一个没有代码的while循环,或Thread.Sleep(0)使UI被阻止( Thread.Sleep(0)使程序也占用100%的程序资源) 所以我这样做: while (!thread.IsAlive) Thread.Sleep(1); -要么- while (bProcessIsRunning) Thread.Sleep(1); 它会阻止UI。 如果我在那里调用Application.DoEvents() ,UI会更新(虽然它是可点击的,所以我必须在此过程运行时禁用整个表单)。 如果我同步运行该进程,我仍然需要创建某种方式来更新UI(在我看来,一个DoEvents调用),所以它似乎没有被锁定。 我究竟做错了什么?

Windows窗体在表格布局面板中重新排列元素

我正在开发一个带有Windows窗体作为GUI的.net系统。 我的应用程序中有一个窗口,我面临一个非常奇怪的问题。 (注意:应用程序是针对.net 4框架和windows表单项目编译的。我使用表格布局来排列表单中的所有元素)。 下面给出了Visual Studio中表单的屏幕截图。 以下是我系统中的屏幕截图(Windows 8 Pro,DELL全高清显示器)。 现在我正在构建可执行文件和DLL并将它们复制到我父亲的系统中(Windows 7,1440 X 900监视器)。 应用程序成功运行,但输出如下所示。 有两件事发生了变化。 开始日期和结束日期标签和日历都已交换(我在function上也进行了测试。开始日期不能晚于结束日期,如果是这样,则会给出错误。我已经检查了这个,并且日历被交换了太。) 显示的日期格式已更改。 注意:我在其他窗口也有这样的小问题。 有没有人遇到过这样的问题?

Button.Visible = true; 在function中激活时,无法将按钮设置为可见

我无法找到其他人遇到同样的问题,所以希望有人可能会有一些想法或能够指出我另一个答案。 通过按下表单上的按钮运行function时,另一个按钮应该可见。 但是,即使它是函数中的第一个按钮,按钮也不会显示。 该函数中的所有其他代码都可以正常工作。 这是代码: private void trackbar_Change(object sender, EventArgs e) { button.Visible = true; progressbar.Visible = true; … progressbar.Visible = false; button.Visible = false; } 进度条显示并且工作正常,函数中的所有其他代码也可以正常工作,但按钮从不显示。 如果我删除button.Visible = false; 从函数结束,然后按钮显示,但只有在所有其他代码执行后。 像这样: private void trackbar_Change(object sender, EventArgs e) { button.Visible = true; progressbar.Visible = true; … progressbar.Visible = false; //button.Visible = false; } 注释掉该行会导致按钮显示出来。 现在如果我在按钮行后面添加一个消息框,那么它也可以工作。 […]

Windows窗体中通用事件处理程序的解决方法

很久以前,我注意到Visual Studio的Windows窗体编辑器不支持包含generics类型参数的事件。 例如,像这样的事件 public event EventHandler<ListEventArgs> MyStrangeEvent { add { … } remove { … } } 哪里 public class ListEventArgs : EventArgs { List args; } 甚至没有出现在Visual Studio的属性管理器的事件列表中。 现在,这是一个有点人为的例子,可以通过重写类及其事件轻松修改以在Visual Studio中工作。 但是,我目前正在开发一个项目,由于兼容性原因我无法更改某些类。 我唯一能做的就是改变用户控件的事件。 此控件的事件当前如下所示: public event EventHandler<Plane.DrawingErrorEventArgs> DrawingError { add { _Plane.DrawingError += value; } remove { _Plane.DrawingError -= value; } } 请注意,无法更改基础Plane类(由_Plane实例表示,它是受保护的字段)。 它的DrawingError事件及其EventArgs类型在Plane类中声明如下: public […]

如何使Windows窗体的关闭按钮不关闭窗体但使其不可见?

此表单具有NotifyIcon对象。 当用户单击“关闭”按钮时,我希望表单不会关闭但会变为不可见。 然后,如果用户想再次看到该表单,他可以双击系统托盘中的图标。 如果用户想要关闭表单,他可以右键单击图标并选择“关闭”。 有人能告诉我如何使关闭按钮不关闭表单但让它隐形吗? (或者,如果有人能够想出一种更好的方法来实现同样的目标)

Windows窗体中的SSO

我需要为两个不同的C#Windows窗体应用程序实现单点登录 你知道这样做的好框架吗?