이 질문에는 이미 답변이 있습니다.
내 응용 프로그램에서는 버튼의 가시성, 텍스트 필드의 enabeling 및 winform 헤더 텍스트를 제어하기 위해 서로 다른 컨텍스트에서 동일한 winform을 실행하고 있습니다. 이 작업을 수행하기로 결정한 방식은 문자열을 양식 생성자에 전달하고 if 문으로 원하는 Winform Tweak가 포함되어 있는지 확인하는 것입니다.
if (formContext == "add")
{
Text = "Add member";
}
if (formContext == "edit")
{
Text = "Change role";
userTextBox.Enabled = false;
searchButton.Visible = false;
}
이것은 정상적으로 작동하지만 "텍스트"키워드는 다음 메시지와 함께 ReSharper에 의해 추가 된 파란색 줄임표를 얻습니다. 생성자의 Viritual member call. 이것은 잠재적 인 문제인가 아니면 지나치게 열정적 인 ReSharper 메시지일까요?
내 구현을 개선하기위한 모든 설명이나 제안은 많은 도움이 될 것입니다.
기본 클래스 ctor의 가상 멤버 호출할 수 있었다서브 클래스의 ctor가 호출되기 전에 (따라서 객체가 일관된 상태로 자신을 초기화 할 수있는 기회를 갖기 전에) 일부 논리를 서브 클래스에서 실행하게합니다.
그것은 좋은 알림이므로 잠재적으로 예기치 않은 예기치 않은 행동을 유발할 수있는 일을한다는 것을 알고 있습니다.
폼에 대한 기존 답변 외에도 Load 이벤트 핸들러를 추가 할 수 있습니다.
Load += delegate
{
if (formContext == "add")
{
Text = "Add member";
}
if (formContext == "edit")
{
Text = "Change role";
userTextBox.Enabled = false;
searchkButton.Visible = false;
}
};
수업을 봉쇄하십시오.
다음과 같이 수업을 다시 작성하시는 것이 좋습니다.
public partial class Form1 : Form
{
public enum FormContextMode
{
Add,
Edit
}
private FormContextMode m_mode = FormContextMode.Add;
public Form1( FormContextMode mode )
{
InitializeComponent();
m_mode = mode;
Load += delegate { UpdateForm(); };
}
private void UpdateForm()
{
if( m_mode == FormContextMode.Add )
{
Text = "Add member";
}
else if( m_mode == FormContextMode.Edit )
{
Text = "Change role";
userTextBox.Enabled = false;
searchkButton.Visible = false;
}
}
}