簡體   English   中英

如何創建一個Windows App(C#),在其中可以在消息框中顯示各種對象中的所有異常

[英]How can I create a Windows App(C#) that has where I can display all the exceptions in various objects in a message box

我正在嘗試在C#中使用MVC。 因此,表單控制器使用身份驗證類實例。 我正在處理身份驗證類中的無效憑據。 但是我無法在消息框中顯示該消息,因為它不在表單控制器類實例中。 請幫忙

您不能簡單地在身份驗證類中拋出異常,並讓您的主表單處理該異常嗎?

// main form
try
{
    User _loggedOnUser = Authenticate.GetLoggedOnUser();
}
catch (AuthenticationException ex)
{
    MessageBox.Show(this, ex.Message, "Unable to authenticate user");
}


// Authenticate class
// ... do something
if (something == true)
    throw new AuthenticationException("User account has been disabled");

或者,如果異常不合適,則使用返回值:

// main form
User _loggedOnUser = Authenticate.GetLoggedOnUser();
if (_loggedOnUser == null)
    MessageBox.Show(this, "Unable to authenticate the user");

因此,您具有身份驗證類,但是如果身份驗證失敗,您將無法訪問任何錯誤消息? 在這種情況下,您將必須修改此類以顯示錯誤消息-您可以添加一個屬性,該屬性返回上一個身份驗證錯誤:

public bool Authenticate(...) { }
public string LastAuthenticationError { get; }

或者,您可以將一個out參數添加到Authenticate方法中:

public bool TryAuthenticate(..., out string errorMessage) { ... }

如果出於某種原因您無法修改此類,那么您真正能做的就是顯示一條通用的“身份驗證失敗”消息。

我可以解釋這個問題的唯一其他方法是,您不能從控制器內部訪問MessageBox類。 在這種情況下,由於MessageBox.Show是靜態的,因此只要身份驗證失敗就可以調用它:

public void Authenticate(...)
{
        ...
    if(! authenticator.Authenticate(...))
    {
        System.Windows.Forms.MessageBox.Show(errorMessage);
    }
}

但是,更好的方法是在視圖上添加“ ShowError”方法並從控制器調用該方法,以免將控制器耦合到視圖庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM