Tag: winforms

Windows窗体:使用BackgroundImage会减慢窗体控件的绘制速度

我有一个Windows窗体(C#.NET 3.5),上面有许多按钮和其他控件,全部分配给一个跨越整个窗体的最顶层面板。 例如,层次结构为:Form – > Panel – >其他控件。 一旦我将BackgroundImage分配给Panel,控件就会非常缓慢地绘制。 如果我使用Form的BackgroundImage属性并将Panel的BackgroundColor设置为“transparent”,我会有同样的效果。 看起来好像首先绘制了具有背景的窗口,然后在绘制下一个控件之前稍微延迟逐个添加每个控件。 换句话说,您实际上可以按照每个控件绘制到窗体的顺序。 一旦所有控件都被绘制,一旦此效果不再发生,但表单的响应性仍然很慢。 在Visual Studio的设计器中,我得到了相同的效果,尤其是在移动控件时。 有时表单的绘图完全停止一两秒,这使得在设计器和生成的应用程序中使用BackgroundImage是一个完全的拖拽。 当然,我尝试使用DoubleBuffered = true,我也使用reflection在所有控件上设置它,没有任何效果。 此外,这里是加载代码的表单,因为它有点不寻常。 它将所有控件从另一个表单复制到当前表单上。 这样做是为了能够使用设计者分别编辑每个屏幕的视觉外观,同时共享通用表单和公共代码基础。 我预感它可能是减速的原因,但它仍然无法解释为什么减速器已经在设计师中引人注目。 private void LoadControls(Form form) { this.SuspendLayout(); this.DoubleBuffered = true; EnableDoubleBuffering(this.Controls); this.BackgroundImage = form.BackgroundImage; this.BackColor = form.BackColor; this.Controls.Clear(); foreach (Control c in form.Controls) { this.Controls.Add(c); } this.ResumeLayout(); } 如您所见, SuspendLayout()和ResumeLayout()用于避免不必要的重绘。 尽管如此,一旦使用BackgroundImage,表单就像“地狱一样慢”。 我甚至尝试将其转换为PNG,JPG和BMP,看看是否有任何区别。 此外,图像尺寸为1024×768,但较小的图像具有相同的减速效果(尽管略小)。 […]

将datagridview绑定到数据库实体的最佳方法

这种方法是数据绑定数据视图存在的最佳方法吗? 我见过许多人在绑定datagridviews时遇到问题,经过大量的工作后我发现这是最好的方法。 我希望它可以帮助其他人,有人可以添加改进。 步骤1)使用编辑器创建dataGridView及其列。 步骤2)创建一个表示datagridview中的行的对象。 此对象可以根据需要包含任意数量的数据库实例。 这是一个包含两个对象的示例(datagridview中的两列) public class ObjectToShow { MyDatabaseObject myDatabaseObject = new MyDatabaseObject(); public ObjectToShow(MyDatabaseObject myDatabaseObject) { this.myDatabaseObject = myDatabaseObject; } public string Data1 //to asign to a datagridview column { get { return myDatabaseObject.data1; } set { myDatabaseObject.data1 = value; NotifyPropertyChanged(“Data1”)} } public string Data2 //to asign to another datagridview column […]

显示DataTable列的总值

我想显示物品总价格的总和。 我面临两个问题: 它显示我错误的物品总价格 我想在总价中加上.00 您可以检查图像中的问题以获得清晰的解释。 这是我的代码: tDisplay.Text = “Return/” + “Receipt No:” + Return_Form.setalueforText011; label1.Text = Return_Form.setalueforText011; OleDbConnection VCON = new OleDbConnection(@”Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\Restaurant.accdb”); DataSet dsa = new DataSet(); DataTable dt = new DataTable(); dsa.Tables.Add(dt); OleDbDataAdapter da = new OleDbDataAdapter(); da = new OleDbDataAdapter(“SELECT [Column1],[Column2],[Column3] from [Total] Where [Receipt No] = ” + label1.Text + “”, […]

如何在WinForms项目中将XML用作DataGridView的DataSource?

如何将可编辑的DataGridView链接到WinForms项目中的XML文件?

鼠标滚轮在winforms中冒泡?

我对winforms和mousewheel事件有一点问题。 我有一个表示滑块的自定义用户控件。 现在,我有几组滑块,其中每个组都包含在一个面板中。 然后将所有组包装在另一个面板(AutoScroll设置为true)中,并将其包装在一个表单中。 实现滑块逻辑,使得鼠标轮可用于改变其值。 为此,滑块用户控件在鼠标滑过滑块时获得焦点。 但是,当我滚动时,AutoScroll父面板也会滚动它。 我已经在这个问题上浪费了很多时间。 有谁知道这里发生了什么以及如何解决它? 我认为事件是冒泡到父面板但我在Slider控件中处理它时没有在事件上找到Handled属性(WPF可能)。 非常感谢

如何将文本框值从Form1复制到Form2?

我有Form1,它有一个文本框和一个按钮。 当用户单击Form1的按钮时, Form2打开时带有一个标签控件,该控件带有Form1本框的值。 我所做的是将Form1的文本框修饰符设置为Public ,但是当我在Form2调用Form1的文本框名称时,出现错误 当前上下文中不存在名称“txtbx1” 我想知道为什么因为我已经将txtbx1的修饰符设置为Public 。 快速注意:我试图将Form2中的Form1实例化为: Form1 f1 = new Form1(); 然后打电话 f1.txtbx1.text 奇怪的是Form1无法实例化(不突出显示)。 另一方面,如果我做Form2 f2 = new Form2(); Form2突出显示! 这是我如何从Form1显示Form2: SetSalary salForm = new SetSalary(); salForm.ShowDialog(); 请注意,SetSalary表示Form2。 任何帮助将不胜感激。

表格之间的沟通

我想知道如何使用C#在表单之间进行通信? 在Visual Basic中,它更容易,因为每个表单都有自己的实例,而C#则不同。 在Program类中,我设置了一个保存表单的公共和静态变量: public static FormProcess2 frmProcess2 = null; 然后在Main方法中创建表单并显示它: frmProcess2 = new FormProcess2(); frmProcess2.ShowDialog(); 现在,当该表单加载时,它会加载处理XML文件的后台进程。 处理所有文件的方法在另一个类名XMLParser 。 所以在BackgroundWorker doWork我通过以下方式加载该方法: XMLParser.Start(); 现在的问题是,我如何修改XMLParser类中的frmProcess2控件? 我希望它通过更改标签文本以及在那里放置一些不错的进度条来显示正在更新的内容。 但我无法访问Program.frmProcess2控件,所有我可以访问的只是它的默认值…

Unhashing哈希C#

有人可以反转我正在使用的这个方便的哈希码吗? using System.Security.Cryptography; public static string EncodePasswordToBase64(string password) { byte[] bytes = Encoding.Unicode.GetBytes(password); byte[] inArray = HashAlgorithm.Create(“SHA1”).ComputeHash(bytes); return Convert.ToBase64String(inArray); } 我最终做的一切都失败了:(。

通过大量控件提高Winforms的性能

在构建具有大量控件(500+)的多个表单时,有什么方法可以提高性能吗? 我们的控件布局在每行配置的标签+ 6文本框中,如下所示: 图片http://sofzh.miximages.com/c%23/test.png 我们使用以下容器来构造控件: DevExpress’XtraLayoutControl 每行周围的面板并手动移动 常用表控件 我们不能使用网格,因为必须根据具体情况隐藏文本框,我们的表单必须看起来非常接近打印输出。 此外,每行都有自己的数据类型,因此我们需要为每个行添加validation和编辑器。 表格控件是最高效的,每个表格大约需要2秒钟才能加载。 由于每个都代表我们软件中的文档,并且我们允许用户一次打开多个文档,我们正在尝试找到一种提高性能的方法。 一个建议是缓存实际表单并具有存储数据的状态对象。 但是,我们允许用户一次查看多个文档。 另一个建议是将文档分批加载并在加载时显示每个部分。 这并不理想,因为我们知道有一个看起来几乎与打印输出完全相同的文档。 有没有其他可用的策略,或者我们应该告诉我们的客户这个程序会比它的VB6前辈慢吗? 我们重新开发的表单设计的一个例子是: 链接

数据表Select()方法

我有一个Datagridview, Data Source是dtCustomer我只想根据搜索文本过滤网格视图的内容。 我试过以下代码 DataTable dtSearch = dtCustomer; dtSearch.Select(“cust_Name like ‘” + txtSearch.Text + “%'”); grvCustomer.DataSource = dtSearch; 但这不起作用。 如果有任何机构知道解决方案,请分享。