Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用app Controller关闭表单?_C#_Sql Server_Winforms_Mvp - Fatal编程技术网

C# 如何使用app Controller关闭表单?

C# 如何使用app Controller关闭表单?,c#,sql-server,winforms,mvp,C#,Sql Server,Winforms,Mvp,有一个AppController,其中管理所有表单 下面我在appController中管理表单,但在那里我只能打开它们。立即和问题,以及如何关闭?而且,当我在同一个窗口上打开它时,同一个窗口打开了。我怎样才能摆脱这个?我试过form==null form.IsDisposed,但有点错误 public class AppController : IAppController { private readonly Mainform_medicalrecord _mainform; public

有一个AppController,其中管理所有表单

下面我在appController中管理表单,但在那里我只能打开它们。立即和问题,以及如何关闭?而且,当我在同一个窗口上打开它时,同一个窗口打开了。我怎样才能摆脱这个?我试过form==null form.IsDisposed,但有点错误

public class AppController : IAppController
{
private readonly Mainform_medicalrecord _mainform;
public IDataContext DataContext { get; }
public IMessageService MessageService { get; }

public AppController(IDataContext dataContext, IMessageService messageService)
{
DataContext = dataContext ??
throw new ArgumentNullException(nameof(dataContext));
MessageService = messageService ??
throw new ArgumentNullException(nameof(messageService));

var vm = new MainViewModel(this);
_mainForm = new MainForm_MedicalRecord(vm);
}

public Form GetMainForm()
{
return _mainForm;
}

public void ShowCardView()
{
var vm = new CardViewModel(this);
var form = new CardView(vm);
form.Owner = _mainForm;
form.ShowDialog();
}
}
查看模式

public CardViewModel(AppController appController)
{
_appController = appController
?? throw new ArgumentNullException(nameof(appController));
}
throw new ArgumentNullException(nameof(appController));
}
CardView

public CardView(CardViewModel cardViewModel)
{
InitializeComponent();
_viewModel = cardViewModel ??
throw new ArgumentNullException(nameof(cardViewModel));
}

我会补充。。。打开表单时,它是重复的,我根本不需要它。请帮帮我。

从评论中阐述我的想法,并举例说明:

private CardView cardView = null;

public void ShowCardView()
{
    if( null == cardView )
    {
        var vm = new CardViewModel(this);
        cardView = new CardView(vm);
        cardView.Owner = _mainForm;
    }
    cardView.Show();
}
请注意,这不是线程安全的!在这里,如果还没有新的(单独的)表单,您的控制器将只创建一个新的(单独的)表单。这避免了“重复”表格

不过,您应该在此代码中添加一些线程安全措施

如果有,可以添加关闭方法:

// Again: TODO Add thread safety!
public void CloseCardView()
{
     cardView?.Close();
     cardView = null;
}

。。。如果你真的需要的话。我认为,隐藏表格就足够了。

请翻译你的标题,因为它很可能会因为不是英文的问题而吸引接近或接近票数的选票。至于你的“问题”,是什么?你什么都没问。标题:如何通过ViewModels关闭表单(根据谷歌)我在谷歌上翻译了标题,请随意改进,如果它不正确@Маааааааааааааааа1072