Tag: 用户界面

在解析非常大的日志文件时保持UI响应

我正在编写一个解析非常大的日志文件的应用程序,以便用户可以以树视图格式查看内容。 我已经使用BackGroundWorker来读取文件,并且在解析每条消息时,我使用BeginInvoke来获取GUI线程以将节点添加到我的树视图中。 不幸的是,有两个问题: 在解析文件时,树视图无法响应点击或滚动。 我希望用户能够在文件解析时检查(即展开)节点,这样他们就不必等待整个文件完成解析。 每次添加新节点时,树视图都会闪烁。 这是表单中的代码: private void btnChangeDir_Click(object sender, EventArgs e) { OpenFileDialog browser = new OpenFileDialog(); if (browser.ShowDialog() == DialogResult.OK) { tbSearchDir.Text = browser.FileName; BackgroundWorker bgw = new BackgroundWorker(); bgw.DoWork += (ob, evArgs) => ParseFile(tbSearchDir.Text); bgw.RunWorkerAsync(); } } private void ParseFile(string inputfile) { FileStream logFileStream = new FileStream(inputfile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); StreamReader […]

WS_EX_NOACTIVATE和WinForms有两个问题

在我的一些应用程序中,我使用WS_EX_NOACTIVATE 扩展窗口样式值 (例如,创建虚拟键盘或托管在另一个程序中的表单)。 此值可防止表单获得焦点。 以下是我的进展方式: protected override CreateParams CreateParams { get { CreateParams p = base.CreateParams; p.ExStyle |= Win32.WS_EX_NOACTIVATE; return p; } } 它运作良好,但我注意到这个解决方案有两个问题: 用户无法通过按“Tab”在控件之间移动 当用户拖动表单时,我们无法看到位移(表单在移动过程中不重绘) 那么,是否有可能解决这些问题,或者至少可以实施一些替代方案? 也许WS_EX_NOACTIVATE不是最好的解决方案吗? 非常感谢!

自定义画笔 – 我想要两个渐变链接在一起

我正在制作条形图,我希望每个条形图有两个单独的渐变。 首先,我想要一个渐变从上到下的纯红色到透明的红色。 我想画一个从右到左,黑色到不透明的渐变的顶部。 所以 – 在左下角我们应该有; 左下角 – 阿尔法0 右下角 – 阿尔法0 左上角 – Alpha 255颜色红色 右上角 – Alpha 255颜色黑色 所以实际上我想采用纯色,从左到右渐变添加到黑色然后获取它的输出并添加从上到下的渐变到透明度。 所有这一切,我希望它在一个刷子,这甚至可能吗?

C#中的线程和GUI元素

我正在尝试创建一个基本的IRC客户端…但我的问题是让文本显示在RTF框中而不会滞后 我决定使用线程,我想更新一个线程中的RTF框,但我不能因为它给出了关于RTF框元素不是静态的错误? 任何见解? 如果你们想要,我会粘贴代码 好的,这里是代码(编辑凹凸?) using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Net.Sockets; using System.IO; using System.Threading; using System.Net; namespace IrcClient { public partial class mainWindow : Form { static IRC client; static string newLine, oldLine; public mainWindow() { InitializeComponent(); } private void main() { […]

如何在WinForms GUI控件和客户端类之间同步数据?

什么方法被认为是保持GUI控件中的数据结构与应用程序维护的数据结构同步的“标准”? 例如:在WinForms中,如果创建一个ListView实例,而不是将其指向表示列表中显示的项的数据结构,则必须以编程方式实例化ListViewItem并调用.Add方法来手动复制它们,一个接一个地进入ListView本身内部的数据结构。 从线程的角度来看,这是有道理的,并且在呈现的上下文中也有意义,控件应该需要存在专用数据结构,控件单独知道有关维护的细节。 但是,这会产生两个问题: 冗余:如果客户端类管理自己的实体列表,允许用户从WinForms UI中选择它们,则必须通过以下方法读取,转换然后在UI控件内重新创建整个列表:.Add( ListViewItem项目)列表现在占用两倍的内存。 复杂性:由于现在存在两个列表,因此必须以编程方式确保它们保持同步。 这可以通过从客户端类的集合对象触发的事件来实现,或者程序员可以在添加/删除另一个列表时始终在一个列表中添加/删除。 我见过许多实例,程序员将使用像ListView这样的UI元素作为用于维护列表的实际集合对象的快捷方式。 例如,每个用户输入的项目将立即插入ListView,然后当访问用户的entires时,应用程序只是遍历ListView。 当您从UI逻辑中正确分离业务/应用程序逻辑时,此方法无法应用。 总的来说,将应用程序数据存储在GUI控件内部的数据结构中似乎并不正确。 同样,存储两个列表并使它们保持程序化同步似乎也不是一个优雅的解决方案。 理想情况下,只需要为UI元素提供对位于客户端范围内的列表的引用。 那么,解决这个问题的“正确”方法是什么?

在WPF中创建自定义关闭按钮

我是WPF / C#的新手,我正在考虑实现一个自定义窗口装饰器。 我需要创建一个关闭按钮,它基本上与关闭或x按钮完全相同,它出现在每个窗口的Windows应用程序的chrome上。

Gui重新管理等待

我在使用NotifyIcons时发现了一个重入问题。 重现起来非常简单,只需在表单上删除NotiftIcon,click事件应如下所示: private bool reentrancyDetected; private void notifyIcon1_MouseClick(object sender, MouseEventArgs e) { if (reentrancyDetected) MessageBox.Show(“Reentrancy”); reentrancyDetected = true; lock (thisLock) { //do nothing } reentrancyDetected = false; } 同时启动后台线程会导致一些争用: private readonly object thisLock = new object(); private readonly Thread bgThread; public Form1() { InitializeComponent(); bgThread = new Thread(BackgroundOp) { IsBackground = true }; bgThread.Start(); } […]

如何在不resize的情况下居中控制? (.net Winforms)

我有一个相当简单的用户控件,代表一个基本的登录控件。 所以它有几个标签,文本框和一个按钮。 我希望这个用户控件填充它的容器,所以我设置了它的dock模式来填充。 到目前为止很容易。 现在,我希望我的用户控件中的所有控件都可以根据呈现时用户控件的大小来居中。 我想不出可以解决问题的锚/码组合。 用户控件具有ReSize事件。 所以我知道我可以在该事件期间根据我的用户控件的大小来计算和移动控件。 但我希望这个问题很常见,如果我愿意,可以通过设计师处理。

基本的GUI事件处理问题C#

下午好, 我有一些关于GUI事件处理的基本问题。 首先使用C#,我们如何将事件链接到对象 – 我猜测事件处理程序? 如果是这样,每个处理程序可以使用单独 – 事件处理程序如何定位必须操作的对象? 我对JAVA的工作原理有一个大概的了解。 指向我的参考将是好的 – 我已经搜索谷歌的答案无济于事。 非常感谢,J

如何在VS 2008 / C#中获得类似Eclipse的类大纲?

我刚刚开始使用VS2008进行新的工具项目,并且在Eclipse / Java上花了很多时间。 我失踪的一件事就是我最后一次使用VS2005时可以发誓的事情 – class级大纲。 我说的是Eclipse中的基本大纲,您可以在其中查看类成员,方法等,然后单击它们以导航到它们。 唯一听起来像是(但不是)的是Class View。 有帮助吗?