PR

【C#】ダイアログ表示時(ShowDialog)の処理(Load)を実装

【C#】
広告

はじめに

C#のWinFormsアプリケーションにおいて、ダイアログを表示する際のShowDialogメソッドは、ユーザーインターフェースを構築する上で非常に重要です。ダイアログを表示するだけでなく、ダイアログが表示される際に初期化処理やデータの読み込みを行うことが求められる場合があります。本記事では、ShowDialogメソッドを使用してダイアログを表示し、その際に必要な処理を実装する方法について解説します。初心者の方にも分かりやすいように、具体的なコード例を交えながら説明します。

ダイアログの基本

ダイアログの表示

ShowDialogメソッドは、モーダルダイアログを表示するために使用されます。以下に、基本的なダイアログの表示方法を示します。

using System;
using System.Windows.Forms;

public class MyForm : Form
{
    public MyForm()
    {
        Button button = new Button();
        button.Text = "Show Dialog";
        button.Click += (sender, e) => {
            Form dialog = new Form();
            dialog.Text = "My Dialog";
            dialog.ShowDialog();
        };
        Controls.Add(button);
    }

    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new MyForm());
    }
}

この例では、ボタンをクリックすると新しいフォームがダイアログとして表示されます。

ダイアログ表示時の処理

ダイアログのLoadイベント

ダイアログが表示される際に初期化処理を行うためには、Loadイベントを使用します。Loadイベントは、ダイアログが表示される直前に発生し、このタイミングで必要なデータの読み込みや初期設定を行うことができます。

using System;
using System.Windows.Forms;

public class MyForm : Form
{
    public MyForm()
    {
        Button button = new Button();
        button.Text = "Show Dialog";
        button.Click += (sender, e) => {
            CustomDialog dialog = new CustomDialog();
            dialog.ShowDialog();
        };
        Controls.Add(button);
    }

    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new MyForm());
    }
}

public class CustomDialog : Form
{
    public CustomDialog()
    {
        Text = "Custom Dialog";
        Load += CustomDialog_Load;
    }

    private void CustomDialog_Load(object sender, EventArgs e)
    {
        // 初期化処理をここに記述
        MessageBox.Show("ダイアログが表示されました。");
    }
}

この例では、ダイアログが表示される際にメッセージボックスを表示しています。

データの読み込み

ダイアログが表示される際にデータを読み込む場合、Loadイベントを使用してデータの初期化を行います。例えば、データベースから情報を取得してダイアログに表示することができます。

using System;
using System.Windows.Forms;
using System.Data.SqlClient;

public class MyForm : Form
{
    public MyForm()
    {
        Button button = new Button();
        button.Text = "Show Dialog";
        button.Click += (sender, e) => {
            CustomDialog dialog = new CustomDialog();
            dialog.ShowDialog();
        };
        Controls.Add(button);
    }

    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new MyForm());
    }
}

public class CustomDialog : Form
{
    private Label dataLabel;

    public CustomDialog()
    {
        Text = "Custom Dialog";
        dataLabel = new Label();
        dataLabel.Location = new System.Drawing.Point(10, 10);
        Controls.Add(dataLabel);
        Load += CustomDialog_Load;
    }

    private void CustomDialog_Load(object sender, EventArgs e)
    {
        // データベースからデータを読み込む例
        string connectionString = "your_connection_string";
        string query = "SELECT TOP 1 DataColumn FROM DataTable";

        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            SqlCommand command = new SqlCommand(query, connection);
            connection.Open();
            SqlDataReader reader = command.ExecuteReader();
            if (reader.Read())
            {
                dataLabel.Text = reader["DataColumn"].ToString();
            }
        }
    }
}

この例では、ダイアログが表示される際にデータベースからデータを読み込み、ラベルに表示しています。

非同期データ読み込み

非同期でデータを読み込むことで、UIの応答性を向上させることができます。非同期処理を使用する場合は、asyncawaitを使用します。

using System;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Threading.Tasks;

public class MyForm : Form
{
    public MyForm()
    {
        Button button = new Button();
        button.Text = "Show Dialog";
        button.Click += (sender, e) => {
            CustomDialog dialog = new CustomDialog();
            dialog.ShowDialog();
        };
        Controls.Add(button);
    }

    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new MyForm());
    }
}

public class CustomDialog : Form
{
    private Label dataLabel;

    public CustomDialog()
    {
        Text = "Custom Dialog";
        dataLabel = new Label();
        dataLabel.Location = new System.Drawing.Point(10, 10);
        Controls.Add(dataLabel);
        Load += async (sender, e) => await CustomDialog_LoadAsync();
    }

    private async Task CustomDialog_LoadAsync()
    {
        // 非同期でデータベースからデータを読み込む例
        string connectionString = "your_connection_string";
        string query = "SELECT TOP 1 DataColumn FROM DataTable";

        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            SqlCommand command = new SqlCommand(query, connection);
            await connection.OpenAsync();
            SqlDataReader reader = await command.ExecuteReaderAsync();
            if (await reader.ReadAsync())
            {
                dataLabel.Text = reader["DataColumn"].ToString();
            }
        }
    }
}

この例では、Loadイベント内で非同期にデータベースからデータを読み込み、ラベルに表示しています。

その他の初期化処理

設定の読み込み

ダイアログが表示される際に、アプリケーションの設定を読み込むことも一般的です。以下に、設定ファイルから設定を読み込む例を示します。

using System;
using System.Configuration;
using System.Windows.Forms;

public class MyForm : Form
{
    public MyForm()
    {
        Button button = new Button();
        button.Text = "Show Dialog";
        button.Click += (sender, e) => {
            CustomDialog dialog = new CustomDialog();
            dialog.ShowDialog();
        };
        Controls.Add(button);
    }

    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new MyForm());
    }
}

public class CustomDialog : Form
{
    private Label settingsLabel;

    public CustomDialog()
    {
        Text = "Custom Dialog";
        settingsLabel = new Label();
        settingsLabel.Location = new System.Drawing.Point(10, 10);
        Controls.Add(settingsLabel);
        Load += CustomDialog_Load;
    }

    private void CustomDialog_Load(object sender, EventArgs e)
    {
        // 設定ファイルから設定を読み込む
        string settingValue = ConfigurationManager.AppSettings["YourSettingKey"];
        settingsLabel.Text = $"Setting Value: {settingValue}";
    }
}

この例では、設定ファイルから設定を読み込み、ラベルに表示しています。

リソースの読み込み

ダイアログが表示される際に、画像やテキストなどのリソースを読み込むこともあります。

using System;
using System.Windows.Forms;
using System.Drawing;

public class MyForm : Form
{
    public MyForm()
    {
        Button button = new Button();
        button.Text = "Show Dialog";
        button.Click += (sender, e) => {
            CustomDialog dialog = new CustomDialog();
            dialog.ShowDialog();
        };
        Controls.Add(button);
    }

    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new MyForm());
    }
}

public class CustomDialog : Form
{
    private PictureBox pictureBox;

    public CustomDialog()
    {
        Text = "Custom Dialog";
        pictureBox = new PictureBox();
        pictureBox.Location = new System.Drawing.Point(10, 10);
        pictureBox.Size = new System.Drawing.Size(100, 100);
        Controls.Add(pictureBox);
        Load += CustomDialog_Load;
    }

    private void CustomDialog_Load(object sender, EventArgs e)
    {
        // リソースから画像を読み込む
        pictureBox.Image = Image.FromFile("path_to_image.jpg");
    }
}

この例では、ダイアログが表示される際に画像を読み込み、PictureBoxに表示しています。

まとめ

本記事では、C#におけるダイアログ表示時の処理(Load)を実装する方法について解説しました。ダイアログが表示される際の初期化処理やデータの読み込みについて、具体的なコード例を交えて説明しました。適切な初期化処理を行うことで、ユーザーにとって使いやすいインターフェースを提供できるようになります。ぜひ、実際のプロジェクトでこれらの方法を活用してみてください。

広告
【C#】
広告
タイトルとURLをコピーしました