标签: winforms

如何从其他线程更新GUI?

Label从另一个线程更新a的最简单方法是什么?

我有一Formthread1,并从我开始另一个线程(thread2).虽然thread2在处理一些文件,我想更新LabelForm用的当前状态thread2的工作.

我怎样才能做到这一点?

.net c# user-interface multithreading winforms

1331
推荐指数
41
解决办法
63万
查看次数

实现INotifyPropertyChanged - 是否存在更好的方法?

微软应该已经实现了一些有趣的东西INotifyPropertyChanged,就像在自动属性中一样,只需指定{get; set; notify;} 我认为这样做很有意义.或者有任何并发​​症吗?

我们自己可以在我们的属性中实现类似'notify'的内容.是否有一个优雅的解决方案,INotifyPropertyChanged在您的班级实施或唯一的方法是通过提高PropertyChanged每个属性中的事件.

如果没有,我们可以写一些东西来自动生成一段代码来引发PropertyChanged 事件吗?

.net c# inotifypropertychanged winforms

621
推荐指数
14
解决办法
29万
查看次数

在Windows窗体应用程序中保存应用程序设置的最佳实践

我想要实现的非常简单:我有一个Windows窗体(.NET 3.5)应用程序,它使用一个路径来读取信息.用户可以使用我提供的选项表单修改此路径.

现在,我想将路径值保存到文件中供以后使用.这将是保存到此文件的众多设置之一.该文件将直接位于应用程序文件夹中.

我理解有三种选择:

  • ConfigurationSettings文件(appname.exe.config)
  • 注册处
  • 自定义XML文件

我读到.NET配置文件没有预见到将值保存回来.至于注册表,我想尽可能远离它.

这是否意味着我应该使用自定义XML文件来保存配置设置?如果是这样,我希望看到代码示例(C#).

我已经看过关于这个问题的其他讨论,但我仍然不清楚.

c# xml configuration-files application-settings winforms

561
推荐指数
11
解决办法
43万
查看次数

跨线程操作无效:从创建它的线程以外的线程访问控件

我有一个场景.(Windows Forms,C#,.NET)

  1. 有一个主要表单托管一些用户控件.
  2. 用户控件执行一些繁重的数据操作,这样如果我直接调用了 UserControl_Load方法,则UI在加载方法执行的持续时间内变得无响应.
  3. 为了克服这个问题,我在不同的线程上加载数据(尝试尽可能少地更改现有代码)
  4. 我使用了后台工作线程来加载数据,完成后会通知应用程序已经完成了它的工作.
  5. 现在来了一个真正的问题.所有UI(主窗体及其子用户控件)都是在主要主线程上创建的.在usercontrol的LOAD方法中,我基于userControl上的某些控件(如文本框)的值来获取数据.

伪代码看起来像这样:

代码1

UserContrl1_LoadDataMethod()
{
    if (textbox1.text == "MyName") // This gives exception
    {
        //Load data corresponding to "MyName".
        //Populate a globale variable List<string> which will be binded to grid at some later stage.
    }
}
Run Code Online (Sandbox Code Playgroud)

它给出的例外是

跨线程操作无效:从创建它的线程以外的线程访问控件.

为了更多地了解这一点,我做了一些谷歌搜索,并提出了一个建议,如使用下面的代码

代码2

UserContrl1_LoadDataMethod()
{
    if (InvokeRequired) // Line #1
    {
        this.Invoke(new MethodInvoker(UserContrl1_LoadDataMethod));
        return;
    }

    if (textbox1.text == "MyName") // Now it wont give an exception
    {
    //Load data correspondin to "MyName"
        //Populate a globale …
Run Code Online (Sandbox Code Playgroud)

c# multithreading invoke winforms

559
推荐指数
18
解决办法
39万
查看次数

如何制作仅接受数字的文本框?

我有一个带有文本框控件的Windows窗体应用程序,我只想接受整数值.在过去,我通过重载KeyPress事件并删除不符合规范的字符来完成这种验证.我看过MaskedTextBox控件,但是我想要一个更通用的解决方案,可以使用正则表达式,或者依赖于其他控件的值.

理想情况下,这将表现为按下非数字字符将不产生结果或立即向用户提供关于无效字符的反馈.

.net c# textbox winforms

559
推荐指数
12
解决办法
102万
查看次数

用更好的浏览器替换.NET WebBrowser控件,比如Chrome?

有没有相对简单的方法将现代浏览器插入.NET应用程序?

据我了解,该WebBrowser控制是一个包装IE,这不会是一个问题,但它看起来是一个很老版本的IE浏览器,以及所有在CSS螺丝起坐方面需要,潜在的安全风险(如果渲染引擎没有打补丁,我真的可以期待修复多个缓冲区溢出问题吗?)和其他问题.

我正在使用Visual Studio C#(快速版 - 它在这里有什么不同吗?)

我想在我的应用程序中集成一个好的Web浏览器.在某些情况下,我只是使用它来处理用户注册过程,与我的网站的一些功能和该订单的其他东西的接口,但我有另一个应用程序,需要更多错误...控制.

我需要:

  • 可以集成到我的应用程序窗口内的浏览器(不是单独的窗口)
  • 对CSS,js和其他Web技术的良好支持,与任何现代浏览器相同
  • 基本浏览器功能,如"导航","返回","重新加载"......
  • 自由访问页面代码和输出.

我正在考虑Chrome,因为它属于BSD许可证,但我会对最新版本的IE感到满意.

尽可能地,我想保持简单.最好的情况是,如果一个人可以修补现有的WebBrowser控制,这已经占我所需要的约70%,但我不认为这是可能的.

我找到了一个用于Mozilla的activeX控件(http://www.iol.ie/~locka/mozilla/control.htm),但看起来它是一个旧版本,所以它不一定是一个改进.

我愿意接受建议

.net c# webbrowser-control winforms

419
推荐指数
11
解决办法
41万
查看次数

如何创建一个带有"是","否"选项和DialogResult的消息框?

我想简单的是/否选择MessageBox,但我认为为此设计一个表单是无稽之谈.我以为我可以使用MessageBox,添加按钮等来实现这一目标.这很简单,但由于没有返回DialogResult,我该如何检索结果?

c# dialogresult winforms

334
推荐指数
9
解决办法
74万
查看次数

如何分组Windows窗体单选按钮?

如何在Windows窗体应用程序中对单选按钮进行分组(很像ASP.NET的radiobuttonlist!)?

所以我可以在从选项中选择的每个案例之间切换.

.net c# radio-button winforms

298
推荐指数
8
解决办法
34万
查看次数

如何自动滚动到多行文本框的底部?

我有一个文本框,其.Multiline属性设置为true.我会定期添加新的文本行.我希望每当添加新行时,文本框都会自动滚动到最底部的条目(最新的条目).我该如何做到这一点?

c# scroll textbox winforms

278
推荐指数
8
解决办法
25万
查看次数

在Windows窗体应用程序中实现键盘快捷方式的最佳方法?

我正在寻找一种在C#中的Windows窗体应用程序中实现常用Windows键盘快捷键(例如Ctrl+ F,Ctrl+ N)的最佳方法.

该应用程序有一个主窗体,可以容纳许多子窗体(一次一个).当用户点击Ctrl+时F,我想显示自定义搜索表单.搜索表单取决于应用程序中当前打开的子表单.

我想在ChildForm_KeyDown事件中使用这样的东西:

   if (e.KeyCode == Keys.F && Control.ModifierKeys == Keys.Control)
        // Show search form
Run Code Online (Sandbox Code Playgroud)

但这不起作用.按键时,事件甚至不会触发.解决办法是什么?

c# keyboard-shortcuts winforms

273
推荐指数
6
解决办法
21万
查看次数