ユーザーが接続用のユーザー名とパスワードを入力するデータベース接続用のUserControlを作成しました。このUserControlはMainWindow.xamlにあります
次に、UserControlの背後にあるコードで、MSSQL接続を作成します。ログインに成功したら、MainWindowに公開するカスタムイベントを発生させます。
たとえばMyUserControl.xaml.cs内
try
{
using (SqlConnection sqlConn = new SqlConnection(connection))
{
sqlConn.Open();
MessageBox.Show("Connessione Riuscita!", "Connessione a " + TextIP.Text, MessageBoxButton.OK, MessageBoxImage.Information);
RaiseMyEvent();
sqlConn.Close();
}
}
catch (SqlException ex)
{
MessageBox.Show("Connessione Fallita: " + ex.Message, "Connessione a " + TextIP.Text, MessageBoxButton.OK, MessageBoxImage.Error);
}
およびMainWindow.xamlでは、mypersonalizedイベントを使用します:
<Window x:Class="XLogin.MainWindow"
xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
xmlns:local="clr-namespace:XLogin" WindowStartupLocation="CenterScreen">
<Grid>
<local:DBLogin x:Name="DBLoginFrame" MyPersonalizedUCEvent="DBLoginFrame_MyPersonalizedUCEvent"/>
</Grid>
</Window>
複数のタイプの接続(MSSQL、Oracle、MySqlなど)にこれが必要です。
これを取得する方法?
最初にデリゲートを定義し、次にそのデリゲートを使用してそのイベントを定義する必要があります。
MyUserControl.xaml.csファイルに以下を追加します
オプション1
public delegate void MyPersonalizedUCEventHandler(string sampleParam);
public event MyPersonalizedUCEventHandler MyPersonalizedUCEvent;
public void RaiseMyEvent()
{
// Your logic
if (MyPersonalizedUCEvent != null)
{
MyPersonalizedUCEvent("sample parameter");
}
}
以上です。イベントを定義しました。
オプション2
public event Action<String> MyPersonalizedUCEvent;
public void RaiseMyEvent()
{
// Your logic
if (MyPersonalizedUCEvent != null)
{
MyPersonalizedUCEvent("sample parameter");
}
}
Action
デリゲートの詳細については、この link を参照してください。
注:
多くの場合、イベントが適切に使用されないと、メモリリークが発生する可能性があります。以下に示すように、登録したイベントハンドラーを削除するコードを記述したことを確認してください。
MyPersonalizedUCEvent -= MyPersonalizedUCEventHandler;
まず、クラスで公開イベントを作成します。
public event EventHandler<MyEventArgs> SomethingChanged;
[〜#〜] nb [〜#〜]MyEventArgs
は、イベントとともにサブスクライバーに渡されるオブジェクトのタイプです。この例では、次のようになります。
public class MyEventArgs{
public String Prop1 {get; set;}
}
次に、クラスでそのまま起動します。
SomethingChanged?.Invoke(this, new MyEventArgs() { Prop1="test" });
最終的には次のように処理します。
private void OnSomethingChanged(object sender, MyEventArgs e)
{
//TODO
}
[〜#〜] nb [〜#〜]OnSometingChanged
メソッドに入るには、イベントにサブスクライブする必要があります。このように購読してください:
myClass.SomethingChanged+=OnSomethingChanged;
ここで、myClass
は、SomethingChanged
を定義するクラスのインスタンスです。