다양한 작업을 수행하는 클래스 라이브러리가 있습니다. 이러한 작업 중 일부는 Windows Form의 사용자 입력에 대한 응답으로 발생합니다. 내가 지금까지 시도한 것은이 같은 라이브러리에 입력 인터페이스를 설정하는 것입니다 : 호출 할 때라이브러리의 함수에서 Windows Form의 사용자 입력을 얻는 방법?
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 interface IInputter
{
string sendInput();
}
는 형태로 인터페이스를 구현 양식 코드에서 라이브러리의 기능 :
: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
루프가 무한대로 실행됩니다.
인터페이스가 양식에 구현 된 라이브러리 내에서 액세스 할 수있는 데이터 스트림을 설정하려면 더 많은 '기본 제공'방법이 있어야합니다. 나는 무엇을 놓치고 있습니까?
커플 : 1. 왜'문자열을 사용 receivedInput = null' (불필요 해 보입니다)? 2. 이것을'string x '로 테스트하려고합니다. inputter.ReceivedInput + = (s, e) => x = e.Text; x + = "hello";'하지만 '할당되지 않은 지역 변수'x '를 사용하면 오류가 발생합니다. 3. 'Form1'에서'EventHandler ReceivedInput' 선언은 라이브러리에 대한 참조를 추가 했음에도 불구하고 'InputReceivedEventArgs'유형 또는 네임 스페이스 이름을 찾을 수 없습니다 '오류를 제공합니다. –
sigil