さまざまなタスクを実行するクラスのライブラリがあります。Windows フォームからのユーザー入力に応答して、これらのタスクのいくつかを実行したいと考えています。これまでに試したことは、次のようにライブラリに入力インターフェイスを設定することです。
public interface IInputter
{
string sendInput();
}
次の形式でインターフェイスを実装します。
public partial class Form1 : Form,IInputter
{
string sentText=null;
public Form1()
{
InitializeComponent();
}
public string sendInput()
{
string inputText=sentText;
sentText=null;
return inputText;
}
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "Excel files (*.xls*)|*.xls*";
DialogResult dr = ofd.ShowDialog();
if (dr == DialogResult.OK)
{
sentText = ofd.FileName;
}
}
}
フォーム コードからライブラリの関数を呼び出すときに、フォームをパラメーターとして渡します。
public partial class StartForm : Form
{
public StartForm()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form1 f1 = new Form1();
f1.Show();
Main main = new Main();
main.main(f1);
}
}
次に、ライブラリ関数から入力関数を呼び出します。
public string main(IInputter inputter)
{
do
{
testBk = inputter.sendInput();
}
while (testBk == null);
return testBk;
}
ただし、Form1
完全にロードされていません。コントロールがあるべき場所に空のスペースがあるだけなので、While
フォームが関数を介してライブラリ関数に入力を送信する方法がなくても、ループは無限に実行されIInputter.sendInput()
ます。
インターフェイスがフォームに実装されているライブラリ内からアクセスできるデータ ストリームを設定するには、より「組み込み」の方法が必要であると確信しています。私は何が欠けていますか?