나는 Control
(예 : ToolStripMenuItem
및 Button
)에 클릭 이벤트에 바인딩 된 함수가 있어야합니다. 새로운 Form
을 생성하거나 TabPage
을 현재 TabControl
에 추가합니다. 결국 같은 함수가 필요한 여러 다른 Control
이 생겨 결국 전역 함수 저장소를 만들려고합니다. 그것은 어디서나 액세스 할 수 있도록 프로그램 시작과 세계적으로 저장 될 때글로벌 함수 리파지토리
public class Services {
TabControl container;
delegate void fonction(int id);
Dictionary<string, fonction> functions = new Dictionary<string, fonction>();
public Services(TabControl control) {
container = control;
InitFunctions();
}
public Delegate Getfunction(string name) {
if (functions.ContainsKey(name))
return functions[name];
else
throw new NotImplementedException("Failed to instantiate " + name);
}
// List of all the desired functions
// Function example
private void ProductLoan(int id) {
string name = "Loan"+id.ToString();
Form newForm = new Loan();
newForm.Text = Properties.Resources.MakeLoan;
newForm.ShowDialog();
}
private void InitFunctions() {
fonction f = new fonction(ProductLoan);
functions.Add("Loan", f);
// For each functions
// f = new fonction(name);
// functions.Add(name, f);
}
}
이 클래스는 인스턴스화 할 것 :
나는이처럼 보이는 Services
라는 이름의 클래스를 가질 것이다. 이런 식으로 진행하는 것은 잘못되었지만 TabControl
의 인스턴스가 있어야하고 함수 목록을 초기화해야하기 때문에 Services
클래스를 정적으로 만들지 않았습니다.
나는 이것이 좋은 생각인지 실마리가 없기 때문에 약간의 조언을 부탁드립니다.
로드시 정적으로 'TabControl'을 할당 할 수 있습니다. 정적 멤버가 "generic things"을 선호합니다. – lcssanches
흥미 롭지 만 여전히 함수 목록을 초기화해야합니다. 'Services' 클래스는 매개 변수가 필요 없으므로 정적 일 수 있습니다. 필자가 염려하는 점은 TabControl을 지정하지 않아도 모든 프로그래머가 함수를 가져올 수 있다는 것입니다. TabControl 인스턴스/참조와 함수 목록을 초기화 할 때'Services '를 사용하는 유일한 방법이 있는지 확인하고 싶습니다. –
제목을 편집했습니다. "[제목에"태그 "가 포함되어 있어야합니까?] (http://meta.stackexchange.com/questions/19190/)"합의가 "아니오, 그렇지 않아야합니다"로 표시되어야합니다. –