[확인] 단추를 사용하도록 설정하기 전에 몇 가지 규칙을 충족해야하는 대화 상자에서 작업하고 있습니다.GUI 응용 프로그램에서 복잡한 규칙 처리 (C++ 또는 C#)
현재 데이터 입력이나 드롭 다운 목록에서 항목 선택과 같은 모든 작업은 ProcessEvent()라는 단일 함수를 호출합니다.이 함수는 모든 논리를 처리하고 OK 버튼을 활성화 또는 비활성화합니다 .
내 문제는 규칙을 간결하고 이해하기 어렵게 만드는 것입니다.
규칙 중 일부는 대화 상자의 다른 작업에 의해 무효화 될 수 있으며, 다른 곳의 진술이나 읽지 못하고 뒤 따르기가 어려울 때 끝납니다. &.
아래의 코드는 문제의 단순화이지만 잘 보여줍니다. 나는 그것은 국가 시스템과 규칙을 제정하려고하는 데 도움이,하지만 그 실제의 경우 그 성격에 따라 수
bool CWorkstation::ProcessEvent(void)
{
UpdateData();
CharCount = GetDlgItemInt(IDC_CharCount, NULL, FALSE); //get latest
if (IsDlgButtonChecked(IDC_USEDBNAME))
{
if (!IsDlgButtonChecked(IDC_MAXDBNAME))
{
EnableNext(TRUE);
}
}
if (IsDlgButtonChecked(IDC_MAXDBNAME) && CharCount)
{
if (IsDlgButtonChecked(IDC_USEXMLNAME))
{
if (PrefixName.IsEmpty())
{
EnableNext(FALSE);
}
else
{
EnableNext(TRUE);
}
}
}
if (IsDlgButtonChecked(IDC_USEXMLNAME) && PrefixName.GetLength() > 1)
{
EnableNext(TRUE);
}
if (IsDlgButtonChecked(IDC_WSAUTONAME) || IsDlgButtonChecked(IDC_RENAMEIFDUP))
{
// TRACE("IDC_WSAUTONAME is Checked\n");
if (IsDlgButtonChecked(IDC_USEXMLNAME) && PrefixName.GetLength() > 1)
{
if (IsDlgButtonChecked(IDC_IDC_USESHORTNAME))
{
EnableNext(TRUE);
}
else if (IsDlgButtonChecked(IDC_USELONGNAME))
{
EnableNext(TRUE);
}
else
{
EnableNext(FALSE);
}
}
if (!IsDlgButtonChecked(IDC_USEPREFIX))
{
if (IsDlgButtonChecked(IDC_IDC_USESHORTNAME) || IsDlgButtonChecked(IDC_USELONGNAME))
{
EnableNext(TRUE);
}
}
return false;
}
}
좋아요. 이제 "& ="가 무엇인지 정확하게 알아 내야합니다. – Canacourse
아 예. & =는 논리 바로 가기 연산자입니다. enableNext = EnableNext = && Condition() 글쎄, 기술적으로는 enableNext = enableNext & Condition1()이지만, bool의 경우에는 사실상 똑같습니다. 게시하려면 편집을 참조하십시오. –
작은 메모 : && = 연산자가 없으므로 Condition1()이 항상 & =와 함께 호출되므로주의해야합니다. 함수에 부작용이 없으면 잘 작동하지만 상태가 바뀌면 예상치 못한 결과가 발생할 수 있습니다. – Macke