ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

c# フォームに貼り付けたListBoxに、フォーム以外のオブジェクトから値を入れる方法

フォームに貼り付けたListBoxに、処理の状況を表示するインターフェースを考えました。
ボタンをクリックすると、処理が始まりますが、指定時刻になると、ボタンをクリックしたときと同じ処理が始まるようにしようと考えています。

きっかけは異なりますが、同一の処理を行いたいので、処理はクラスとして実装します。

処理の状況が確認したいので、処理が進むたびに、ListBoxに表示を追加していきたいのですが、クラスからどうやったら表示したい値を追加できるのか、思いつきませんでした。

ソースコード
Photo by Oscar Nord on Unsplash

フォームにListBoxに追加用のメソッドを作成し、フォームオブジェクトを処理のオブジェクトに渡して、処理をする

解決策を検索した結果、以下の方法が見つかりました。

フォーム側

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Button1_Click(object sender, EventArgs e)
    {
        Test test = new Test(this);
        test.Execute();
    }

    public void AddListItem(string item)
    {
        ListBox1.Items.Add(item);
    }
}ni

クラス側

class Test
{
    Form1 __form1;

    public Test(Form1 form1)
    {
        __form1 = form1;
    }

    public void Execute()
    {
        __form1.AddListItem("処理開始");
    }
}

方法は、
・フォームに、ListBoxに値を追加するための、パブリックのメソッドを用意する。
・処理を行うオブジェクトを生成時に、フォームのオブジェクトを渡す。
・処理を行うオブジェクトは、フォームのオブジェクトの、ListBoxに値を追加するための、パブリックメソッドを使って、値を追加する。
という内容でした。
thisでフォームのオブジェクトが渡せ、Visual Studioにおいても、パブリックメソッドがコードの候補として表示されました。


参考にしたページはこちらです。
teratail.com
質問と回答をされた方に感謝します。