winforms 相关问题

WinForms是Windows Forms的非正式名称,Windows Forms是Microsoft .NET Framework和Mono中的GUI类库。此标记中的问题也应使用目标框架([.net]或[mono])标记,并且通常应使用编程语言标记进行标记。

net 6 winforms单独的表单控制在未聚焦时弹出冻结并使用本机windows文件传输弹出

在我的winforms应用程序中,当用户单击主窗体菜单中的项目时,我有一个单独的较小窗口弹出窗体。现在,弹出的这个较小的表单有一个按钮,一旦单击,它

回答 1 投票 0

为什么 Blazor 值更改后没有立即渲染?

在 WinForms .NET 8 表单中使用 BlazorWebView 控件(简介),我确实显示了这个“Counter.razor”文件: 在 WinForms .NET 8 表单中使用 BlazorWebView 控件(简介),我确实显示了这个“Counter.razor”文件: <p><button @onclick="IncrementCount">Increment counter</button></p> <p>@_counterValue</p> @code { private int _counterValue = 0; private void IncrementCount() { _counterValue++; } } 正确的行为 上面的代码完美运行: 用户单击按钮。 变量递增。 页面显示新的变量值。 不正确的行为 现在我将 IncrementCount() 方法更改为: private void IncrementCount() { SynchronizationContext.Current!.Post( delegate { _counterValue++; }, null); } 现在它的行为是这样的: 用户单击按钮。 变量递增(现在为“1”)。 页面仍显示“0”。 用户再次单击按钮。 变量再次递增。 (现在是“2”)。 页面显示“1”。 等等。 即我总是有一个相差一的错误。 修复它 要解决此问题,我必须将代码更改为: private void IncrementCount() { SynchronizationContext.Current!.Post( delegate { _counterValue++; StateHasChanged(); }, null); } 现在,添加对 StateHasChanged() 的调用后,它的行为符合预期: 用户单击按钮。 变量递增。 页面显示新的变量值。 背景 上面SynchronizationContext的用法是一个大型应用程序的最小示例,我必须通过这种机制调度调用(主要是因为我必须调用其他WinForms对话框)。 我确实想了解为什么需要调用“StateHasChanged”,因为我想避免它。 在我的实际应用程序中(不是上面的最小示例),这将强制进行大量重新渲染以适合应用程序。 我的问题 有人可以向我解释一下为什么我直接更改变量与通过SynchronizationContext更改变量的行为不同吗? 是否有更改可以使其工作而无需额外调用 StateHasChanged()? 更新1 在我的现实世界应用程序中,我大致执行以下步骤: 用户单击 Blazor 按钮。 显示 WinForms 表单。 关闭表单后,我必须更新 Blazor 中的一些值。 所以这就是我在 SynchronizationContext.Current!.Post() 调用中执行代码的原因,如建议的 here。 我还尝试将我的代码放入队列中并在 Application.Idle 事件处理程序中处理该队列,但这行为完全相同(相差一错误)。 IncrementCounter 由渲染器的 UI 事件进程发布到 同步上下文。它在 callback UI 处理程序中作为 ComponentBase 传递。 Task IHandleEvent.HandleEventAsync(EventCallbackWorkItem callback, object? arg) { var task = callback.InvokeAsync(arg); var shouldAwaitTask = task.Status != TaskStatus.RanToCompletion && task.Status != TaskStatus.Canceled; // After each event, we synchronously re-render (unless !ShouldRender()) // This just saves the developer the trouble of putting "StateHasChanged();" // at the end of every event callback. StateHasChanged(); return shouldAwaitTask ? CallStateHasChangedOnAsyncCompletion(task) : Task.CompletedTask; } 完整代码可以在这里找到:https://github.com/dotnet/aspnetcore/blob/63c8031b6a6af5009b3c5bb4291fcc4c32b06b10/src/Components/Components/src/ComponentBase.cs#L322 所以你正在做的就是发布这个 { _counterValue++; } 作为代码块进入IncrementCounter后面的同步上下文队列。 IncrementCounter 在执行代码之前完成所有渲染并改变 _counterValue。 当直接更改时,突变会在 UI 处理程序中调用 StateHasChanged 之前发生。 问题:为什么要直接将代码发布到同步上下文? ComponentBase具有内置函数InvokeAsync来调用必须在同步上下文上执行的任何代码,请参阅 - https://github.com/dotnet/aspnetcore/blob/63c8031b6a6af5009b3c5bb4291fcc4c32b06b10/src/Components/Components/ src/ComponentBase.cs#L178 注: 我现在从来没有编写过这个代码: private void IncrementCount() { } 我总是这样做: private Task IncrementCount() { //work return Task.CompletedTask; } 它可以防止这种情况发生: private async void IncrementCount() { }

回答 1 投票 0

如何修复 C# WinForms 应用程序在 Windows 11 上无法正确加载?

我有一个 C# Windows 窗体应用程序,最初是在 Windows 10 上编写和测试的。该应用程序需要能够在任何给定的监视器上打开(通过配置文件设置),并且此功能...

回答 1 投票 0

如何将变量的状态传递给子表单?

我有一个包含布尔单元已连接的表单。如何将此布尔值的状态传递给我创建并按下按钮打开的子表单? 主窗体代码: // 全局变量 公共...

回答 2 投票 0

不带属性的WinForms数据绑定

在WinForms中,是否可以在不使用属性的情况下进行数据绑定? 我有一个类,它具有一些可以数据绑定的属性,但是它也有一些用户定义的自定义字段,这些字段只是

回答 1 投票 0

如何在子窗体中引用主窗体对象?

我有一个带有按钮的主窗体,单击该按钮后,使用以下代码打开一个子窗体: // 全局变量 公共布尔单元连接=假; 私人无效按钮OpenSubForm_Click(对象发送者,

回答 2 投票 0

Windows 窗体显示设计错误,找不到没有文件名的“.config”文件

Visual Studio 项目由一个 Windows 窗体和一个在按钮单击事件上调用的控制台应用程序项目组成。主窗体有多个用户控件,这些控件被带到前面以供用户访问...

回答 1 投票 0

单击按钮时立即更改所有菜单项前景色

我已经带着这个问题来了,但答案不是我所期望的...... 正如您在上图中看到的,我有两个主题(浅色和深色)。 “Light”主题运行良好,但是当我...

回答 1 投票 0

ComboBox 的编辑框部分会被自动选择

我有一个小问题困扰了我几个小时。 在我的 WinForms (.NET 3.5) 应用程序中,我在运行时在 TableLayoutPanel 中创建一些组合框 (DropDownStyle = DropDown) 并填充...

回答 9 投票 0

尝试从 ZipArchive C# 读取 ZipFile 时出现 System.MissingMethodException [重复]

我有一个 C# .NET (v4.6.2) WinForms 应用程序,我正在其中访问一个文件,该文件可能是也可能不是使用“System.IO.Compression;”创建的 .zip 存档。我有“System.IO.Compression”和System.IO。

回答 3 投票 0

c# Winform picturebox 从 url 加载图像出现 403 错误

我尝试通过URL将在线图像加载到winform应用程序的图片框中,但它返回403错误,代码如下: 私有无效MainFunction() { 字符串 PictureURL = getURLFromSom...

回答 1 投票 0

如何在 WinForm 中选择形状

我有一个c# WinForm项目,其中包含以下代码来绘制矩形和椭圆形: 公共部分类 Form1 :表格 { 列表 _矩形 = new(); 列表

回答 1 投票 0

C# - Winforms - 组合框 - 避免选择更新数据源的第一项

我的应用程序中有一个组合框,其中的项目根据您可以在文本字段中输入的搜索文本异步加载。 这工作正常,但每次第一个项目的文本都是

回答 2 投票 0

需要能够根据组合框值的选择将不同的报告加载到同一个报告查看器中,我该怎么做?

实际上,我需要做的是从组合框中一一选择我的sql数据库中的视图并将它们传输到reportviewer,或者也可以通过从...中的数据集编写sql查询来完成

回答 1 投票 0

如果 MenuStrip 设置了此快捷键,则快捷键 Ctrl+C Ctrl+V 在文本框中不起作用

目标:具有复制和粘贴功能的菜单条,用户应看到快捷键。 问题:如果您有一个 MenuStrip 并设置了快捷键,它们会被菜单“捕获”,但不再被文本框“捕获”...

回答 5 投票 0

动态创建按钮的保存功能

我想保存用户在程序执行过程中创建的文本和单个按钮功能。为此,我使用 Properties.Settings.Default 和我创建的 ButtonStringCollection

回答 1 投票 0

如何通过文本框搜索列表框

我尝试搜索列表框,但它只搜索第一列,其他列好像不存在。列表框中的数据由空格分隔,为 4 列数据。 这我...

回答 1 投票 0

System.Recources.Resourcemanager 仅根据 CultureInfo 对象查找“默认”.resx 文件(翻译文件)

我在根据 CultureInfo 对象检索正确的翻译文件 (.resx) 时遇到问题。所以我有一个翻译解决方案,其中有四个 .resx 文件(

回答 1 投票 0

ObjectListView 不显示图像

所以,我一直在尝试使objectlistview 在标题旁边显示封面图像。 伊姆古尔 我希望每一行都有自己的专辑图像,但 ImageAspectName 似乎没有.. w...

回答 1 投票 0

C# 如何将用户控件添加到流程布局面板

我正在制作一个基本的食谱系统。有什么方法可以将我的用户控件放到我的流程布局面板中。我想创建一个自定义列表,用户可以输入食谱的名称并

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.