Tag: winforms

如何在运行时没有PropertyGrid的情况下打开复杂属性的属性对话框

考虑一个带有一些自定义UserControl和Button的表单。 在Visual Studio设计器中,您可以单击属性右侧的按钮(就像更改控件(如Font或Image )上的其他常用属性时一样)并使用此属性的编辑器。 在运行时,如果已将PropertyGrid添加到表单并将其指向此UserControl ,则还可以在运行时单击该复杂属性右侧的按钮,并获取相同的UITypeEditor对话框。 如何在运行时通过单击按钮而不在表单上显示PropertyGrid来获取此编辑器窗口? 虽然我从这个描述符中获得了PropertyDescriptor和UITypeEditor ,但是在调用UITypeEditor.EditValue以显示编辑器时,我不知道要调用什么来获取ITypeDescriptorContext和IServiceProvider的实例。 这与为属性构建自定义UITypeEditor有关: 使用丰富的设计时function构建Windows窗体控件和组件 。 在这种情况下,我已经配置了所有这些并且它都运行得很漂亮所以我只想在运行时调用编辑器窗口。

wpf InteropBitmap到位图

我有一个奇怪的问题。 我正在尝试检索已经加载到webbrowser控件中的图像。 以下代码在WinForms应用程序中正常工作: IHTMLControlRange imgRange = (IHTMLControlRange)((HTMLBody)__ie.NativeDocument.BODY).createControlRange(); foreach (IHTMLImgElement img in __ie.NativeDocument.Images) { imgRange.add((IHTMLControlElement)img); imgRange.execCommand(“Copy”, false, null); System.IO.MemoryStream stream = new System.IO.MemoryStream(); using (Bitmap bmp = (Bitmap)Clipboard.GetDataObject().GetData(DataFormats.Bitmap)) { bmp.Save(stream, System.Drawing.Imaging.ImageFormat.Bmp); var image = System.Drawing.Image.FromStream(stream); } } 但是,如果我在WPF应用程序中使用相同的代码会给出错误 using (Bitmap bmp = (Bitmap)Clipboard.GetDataObject()……. 错误如下: “无法将’System.Windows.Interop.InteropBitmap’类型的对象强制转换为’System.Drawing.Bitmap’。” 我该如何解决这个问题? 请任何人都可以提供任何指导。 先感谢您。

如何更新ListView的选定项目?

我有一个ListView,它显示多行ListViewItems。 用户可以通过单击“编辑”后打开的对话框编辑其中一个项目。 当对话框关闭时,我想修改所选的ListViewItem,使其反映新的设置。 以下是我目前更新项目的方式: private void btnEditSnmpV3Setting_Click(object sender, EventArgs e) { if (lstVwSNMPv3Settings.SelectedItems.Count > 0) { ListViewItem selectedItem = lstVwSNMPv3Settings.SelectedItems[0]; NetworkDiscoverySnmpSetting settings = (NetworkDiscoverySnmpSetting)selectedItem.Tag; NetworkDiscoverySnmpV3SettingsDialog dialog = new NetworkDiscoverySnmpV3SettingsDialog(settings); //Pass in the owner for centering of dialog. if (dialog.ShowDialog(this) == DialogResult.OK) { selectedItem.SubItems.Clear(); selectedItem.Text = settings.SnmpV3Username; selectedItem.SubItems.Add(settings.SecurityMode.ToString()); selectedItem.SubItems.Add(settings.AuthenticationProtocol.ToString()); selectedItem.SubItems.Add(settings.PrivacyProtocol.ToString()); selectedItem.Tag = settings; } } } […]

富文本框如何突出显示文本块而不选择

我需要在RTB中突出显示我的文本的某一部分,而不是在改变字体样式/颜色的意义上,而是在使用特定颜色进行块选择的意义上。 这类似于Visual Studio在调试模式下突出显示一行的方式。 这里重要的是在没有使用richtextbox.select函数的情况下实现上述function,因为我所拥有的richtextbox正在定期更新,如果它在每次更新时调用select函数,用户将很难拖动文本而我不会我不希望这种情况发生。 我在编辑rtf的某个地方听到过一个解决方案,但我不完全确定如何做到这一点。 我很感激任何帮助。

从另一个线程调用show后,Windows窗体窗体挂起

我的应用程序有一些异步运行的网络代码。 当没有连接到服务器时,我附加了一些要抛出的事件,当发生这种情况时,我正在创建一些“操作失败”的表单。 问题是我的表单在创建后挂起。 我读到了这个,我尝试用: public void ShowView() { if (this.InvokeRequired) { Action a = new Action(ShowView); this.Invoke(a); } else this.Show(); } 问题仍然存在。 比我发现如果没有创建控件,InvokeRequired返回false。 所以我在初始化代码中添加了: this.show(); this.hide(); 这种方式似乎有效。 但它非常难看,当我的应用程序启动时,我可以看到我的表单被显示而不是消失。 我应该如何让我的表单创建所有控件而不显示它,或者是否有更好的解决方案来解决这个问题? 编辑:更多信息。 我正在使用MVP设计模式。 我有Presenter,它依赖于IView。 我的表单实现了IView。 IView有我从我的演示者调用的ShowView()和HideVIew()方法。 我的演示者从另一个线程接收事件。 那么我应该在哪里进行这种线程跳转或者我应该如何解决这个问题? EDIT2:这里示例应用程序说明问题: public partial class Form1 : Form { Form2 form; public Form1() { InitializeComponent(); form = new Form2(); } […]

ORM,DataBinding to DataGridView:插入/删除未保存到数据库的新行

我对ORM很新,而且我现在正在尝试使用Telerik OpenAccess ORM,但这个问题可能实际上并不是特定于ORM,而且我还没有完全确定那个ORM。 我想要实现的是绑定DataGridView以显示Customers对象的集合,显示customer表中的所有客户。 我已将它绑定到BindingSource并将BindingSource绑定到DataGridView控件。 我可以成功修改现有项目(使用OpenCccess ORM的SaveChanges方法)。 保存时,内容将按照我的预期保存回数据库。 但是,如果我从DataGridView中删除一行或添加新行,则它们不会保存到数据库中,也不会出现任何错误消息或exception。 理想情况下,我希望能够使用ORM执行所有可能的CRUD操作,就像我可以使用典型的DataTable执行此操作一样… 执行绑定的代码如下所示: List ukCustomers = (from c in diagrams.Customer where c.Country == “UK” select c).ToList(); customersBindingSource.DataSource = ukCustomers; customersBindingSource.AllowNew = true; 我目前的猜测是,用户添加到DataGridView的新行不是列表的一部分,而是“独立”的客户实例? 我本以为它们会自动添加到列表中。 删除的行也一样,我认为会自动从列表中删除,而ORM的SaveChanges方法可以选择它吗? 我应该做的不仅仅是绑定吗? 有没有人在这方面取得任何成功,总的来说,你的数据绑定使用WinForms的成功程度是多少,你选择的ORM(不一定是Telerik的)? 谢谢。

Word拼写检查弹出隐藏并“冻结”我的应用程序

我在我的内部WinForm应用程序中使用Word的拼写检查。 我的客户端都是带有Office 2007的XP机器,并随机在应用程序后面弹出拼写检查建议框,并使所有内容“显示”冻结,因为您无法获取它。 建议? 其他人怎么做才能解决这个问题或完全停止呢? 谢谢 以下是我的代码,供参考。 public class SpellCheckers { public string CheckSpelling(string text) { Word.Application app = new Word.Application(); object nullobj = Missing.Value; object template = Missing.Value; object newTemplate = Missing.Value; object documentType = Missing.Value; object visible = false; object optional = Missing.Value; object savechanges = false; app.ShowMe(); Word._Document doc = app.Documents.Add(ref template, […]

Windows窗体 – 如何在C#中的combobox项目中添加标题无法选择?

我需要创建一个自定义combobox控件,允许标题作为分隔符,不能使用鼠标移动或按键选择。 这是一个例子: Header1 item1 item2 item3 Header2 item4 item5 我尝试了很多解决方案,没有成功。 提前致谢!

TableLayoutPanel的控制列属性

我注意到添加到TableLayoutPanel的每个控件都有“Column”和“Row”属性。 如何通过代码访问这些属性? 谢谢:)

压缩XML指标。

我有一个客户端服务器应用程序,它通过TCP / IP从客户端发送XML到服务器,然后广播到其他客户端。 我如何知道通过压缩XML而不是通过常规流发送来保证性能改进的XML的最小尺寸。 对此或示例有什么好的指标吗?