相关疑难解决方法(0)

使用Windows窗体实现MVC

在哪里可以找到关于如何在Windows窗体中完全实现MVC模式的好例子?

我在各个站点上找到了许多教程和代码示例(例如,代码项目和.NetHeaven),但是许多比MVC更能代表观察者模式.由于我想开发的应用程序是针对学校项目的,我不愿意使用像PureMVC或MVC#这样的框架.

.net model-view-controller winforms

102
推荐指数
3
解决办法
5万
查看次数

MVVM for winforms

可能重复:
Windows窗体的UI设计模式(如WPF的MVVM)

MVVM应该用于WinForms吗?如果是这样,使用MVP的优势是什么?

mvvm winforms

32
推荐指数
3
解决办法
4万
查看次数

使用SpecFlow,White,Spring和MS Test测试WinForms/CompositeUI GUI

我有一个C#桌面应用程序(CompositUI/WinForms).此应用程序使用SmartClient连接到Web服务.我的任务是使用SpecFlow和White框架为此应用程序引入(改进)测试.为了测试GUI,我需要模拟webservice调用.连接到它的类正在通过Spring.net注入.我的任务是测试能够在测试期间模拟webservice调用的应用程序,这意味着,我的测试代码需要控制我的模拟将执行的操作.问题:启动GUI的方法根本就是不将控制权返回给调用它的线程.结果,我们无法控制GUI和模拟.

所以我现在的问题是:

  • 它是可行的(如果是这样 - 如何做)在单独的线程中启动GUI并控制回测试线程?

  • 什么是运行GUI测试的其他可能性,这将允许我控制注入?

.net testing user-interface spring.net winforms

6
推荐指数
1
解决办法
1192
查看次数

表单在 Hide() 上被处理

我有一个在 .NET Framework 4.0 上运行的 C# WinForms 应用程序。

当用户在一段时间内处于非活动状态时,我希望它隐藏所有显示的表单并在通知区域中显示一个图标。当用户单击该图标时,会出现一个登录表单,如果凭据有效,它将打开之前打开的表单。

为此,我将打开的表单列表存储在List对象中Form并隐藏它们,如下所示。该方法由Timer调用:

private void LogOut()
{
    foreach (Form form in Application.OpenForms)
        if (form.Visible)
        {
            GlobalVariables.formList.Add(form);
            form.Hide();
        }
}
Run Code Online (Sandbox Code Playgroud)

验证凭据后,我尝试使表单再次可见,如下所示:

//Show the previous forms.
foreach (Form form in GlobalVariables.formList)
    form.Visible = true;

//Clear the forms list.
GlobalVariables.formList.Clear();
Run Code Online (Sandbox Code Playgroud)

如果我在隐藏表单时只打开 MainForm,则在重新登录时它会正常显示。如果我打开任何其他表单(从 MainForm 打开ShowDialog()),程序将崩溃form.Visible = true;并给出以下信息错误信息:

ObjectDisposedException was unhandled
Cannot access a disposed object
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?另一种实现我想要实现的目标的方法也很棒。

请注意,使用 try - catch 块来确定表单是否已被处理并重新启动表单不是一个选项,因为用户可能在隐藏表单中具有未保存的输入。

经过 3 个多小时的搜索,我无法在网上找到任何相关内容,因此我们将不胜感激!

编辑:在尝试了各种方法之后,我注意到问题只发生在我使用打开表单的表单上ShowDialog() …

c# forms dispose winforms c#-4.0

4
推荐指数
1
解决办法
3831
查看次数

如何在C#中从另一个表单更新一个表单上的标签?

我想更新Form1from的标签Form2.所以这就是我所拥有的:

// Form1
public string Label1
{
    get { return this.label1.Text; }
    set { this.label1.Text = value; }
}


// Form2
private void button1_Click(object sender, EventArgs e)
{
    Form1 frm1 = new Form1();
    frm1.Label1 = this.textBox1.Text;
    this.Close();
}
Run Code Online (Sandbox Code Playgroud)

所以上面的代码不起作用.但是,当我添加以下内容时:

frm1.Show();
Run Code Online (Sandbox Code Playgroud)

后

this.Close();
Run Code Online (Sandbox Code Playgroud)

在Form2代码中,Form1显然是再次打开(两个窗口).但是我希望它在同一个窗口中更新,所以我认为this.Close()是不必要的.

有人有主意吗?

.net c# forms winforms

0
推荐指数
1
解决办法
6322
查看次数