Tag: winforms

TextBox可以显示的最大字符数

刚才我看到了一个问题: StringBuilder不会在TextBox中显示(WinForms,C#) 。 该post的作者无法在他的单行TextBox显示他的内容,这是一个大约50k字符的字符串。 答案指出他应该将MultiLine属性更改为true 。 在评论中给出了解释: 由于迭代次数为10000次,因此生成的字符串很大,并且不会显示在单行文本框中。 所以我很好奇单行文本框可以显示的最大长度 。 我浏览了SO并发现了这个问题: TextBox最大字符数量(它不是MaxLength) ,它清除了一些疑问,但并非全部。 我还是想知道: 由于Text属性是String类型,为什么当MultiLine为false时它甚至无法处理50k字符? 当MultiLine为false时, TextBox可以容纳多少个字符? 我们有办法获得这个号码吗? 为什么MultiLine属性会影响此function? 对于问题2的第一部分,我做了以下事情来validation: 我怀疑这个长度与分配给Text属性的内存有关。 我在网上做了一些研究,这篇MSDN文档给了我一些见解: Windows NT 4.0,Windows 2000,Windows 2000 Professional,Windows 2000 Server,Windows 2000 Advanced Server,Windows XP Home Edition,Windows XP Professional x64 Edition,Windows Server 2003平台注意:如果MaxLength属性设置为0,则最大数量为用户可以输入的字符是2147483646,或者是基于可用内存的数量,以较小者为准。 所以我做了一个实验:我创建了2个TextBox ,即textBox1和textBox2 。 textBox2将显示textBox1的实时字符数。 另外,我将两个TextBox的MaxLength属性更改为0 。 代码如下所示: public Form1() { InitializeComponent(); textBox1.TextChanged += […]

InvalidOperationException – 对象当前正在其他地方使用

我已经完成了这个问题,但没有帮助。 这里的情况不同。 我正在使用Backgroundworkers。 第一个backgroundworker开始对用户的图像输入进行操作并在firstbackgroundworker_runworkercompleted()内部我正在使用调用其他3个后台工作者 algo1backgroundworker.RunWorkerAsync(); algo2backgroundworker.RunWorkerAsync(); algo3backgroundworker.RunWorkerAsync(); 这是每个的代码: algo1backgroundworker_DoWork() { Image img = this.picturebox.Image; imgclone = img.clone(); //operate on imgclone and output it } algo2backgroundworker_DoWork() { Image img = this.picturebox.Image; imgclone = img.clone(); //operate on imgclone and output it } 类似的操作在其他algo * backgrougrondworker_doWork()中完成。 现在有时我得到“InvalidOperationException – 对象目前正在其他地方使用”。 它很随意。 我有时会在algo1backgroundworker_DoWork中获取此信息,有时在algo2backgroundworker_DoWork中,有时在Application.Run(new myWindowsForm())中获取; 我不知道发生了什么事。

在Windows窗体应用程序中捕获应用程序exception

无论如何都要捕获代码中任何地方引发的探测? 我想捕获exception并以类似的方式处理它们,而不是为每个function编写try catch块。

关闭表单然后再调用另一个表单

我想关闭我正在使用的当前表单(MainForm),然后打开第二个表单(Form)。 我试过了: private void buttonStartQuiz_Click(object sender, EventArgs e) { this.Close(); Form2 form2 = new Form2(); form2.ShowDialog(); } 或者添加this.Close(); 在form2.ShowDialog()也不起作用。 任何提示? 编辑:也可以通过在this.Close()之后添加this.Close()来添加它。它仅在我关闭新表单时关闭。 如果我选择form2.Show()它会立即关闭两个表单。

WinForms DataGridView – 数据绑定到具有列表属性的对象(可变列数)

我有一个.NET类,我想在DataGridView中显示,默认的数据绑定 – 将DGV的DataSource设置为对象 – 产生90%的需求(即它正确输出公共属性,我可以轻松添加排序) 。 但是,我需要绑定的属性之一是List,其中包含需要在其他数据绑定项之后的单独列中的数据。 我坚持认为如何最好地实现这一点。 我的课看起来像这样: public class BookDetails { public string Title { get; set; } public int TotalRating { get; set; } public int Occurrence { get; set; } public List Rating { get; set; } } 理想情况下,我可以将Rating属性扩展为多个数字列,以便在运行时提供如下输出: 标题| 总评分| 发生| R1 | R2 | R3 …… RN 将总评分计算为所有单个评级的总和也是有用的,但我现在手动更新该评级没有问题。

使用C#静音Windows卷

任何人都知道如何使用C#以编程方式静音Windows XP卷?

C#GUI刷新和异步串口通信

我正在尝试创建一个通过串口与硬件通信的应用程序,并将结果报告给gui。 目前通过GUI移动是由KeyEvents引起的,它触发了GUI的下一个“页面”的绘制。 然而,在一步(按下键后)我需要绘制新页面并通过串口发送一些命令。 命令发送通过以下方式完成: port.Write(data, 0, data.Length); 然后我等待DataReceivedHandler触发等待答案 – 它只是确定存在等待的数据并且正在以另一种方法处理数据。 起初我只是将“发送和接收”命令放在“绘制部件”之后绘制页面的function中,但它使其卡住 – 数据被转移,但页面未被绘制 – 它被冻结。 然后我做了一个异步方法: private async void SendData() { await Task.Run(() => serialClass.SendAndReceive(command)); // process reply etc. } 使用的是这样的: public void LoadPage() { image = Image.FromFile(path); //do some stuff on image using Graphics, adding texts etc. picturebox1.Image = image; SendData(); } 它工作正常,但我需要“重新加载”页面(再次调用LoadPage)。 如果我在async方法中这样做: […]

使用Timer在C#中更新UI

我正在努力使我的应用程序从串行端口读取数据并更新UI上的仪表更高效,我想要求我处理UI更改的代码的一些建议。 我有一个定时器设置来检查发送到COM端口的数据和另一个定时器,它使用从COM端口接收的变量更新UI。 基本上发生的事情是我正在旋转仪表。 这是我处理图形的代码…… void timer_Tick(object sender, EventArgs e) //Timer regulates how often the gauge is updated on the UI { if (pictureBox1.Image != null) pictureBox1.Image.Dispose(); // dispose old image (you might consider reusing it rather than making a new one each frame) Point test = new Point((int)_xCor, (int)_yCor); Image img = new Bitmap(400, 400); […]

如何在DataGridView C#中合并特定的列标题?

我想为两列采用列标题文本。 你会怎么做? 像这样 | 全名| | 第一个| 持续 我在一栏中展示了第一个和最后一个

如何在C#中旋转标签?

我想显示一个旋转90度的标签(所以我可以将一堆标签放在桌子顶部作为标题)。 是否有捷径可寻?