gpt4 book ai didi

c++ - 在 GUI 应用程序(C++ 或 C#)中处理复杂规则

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:32:49 37 4
gpt4 key购买 nike

我正在处理一个对话框,在启用“确定”按钮之前必须满足其中的几个规则。

目前,页面上的任何操作(例如输入数据或从下拉列表中选择项目(以及其他操作))都会调用一个名为 ProcessEvent() 的函数 - 此函数处理所有逻辑并启用或禁用“确定”按钮。

我的问题是我发现很难使规则简洁易懂。

一些规则可以被对话框中的另一个 Action 否定,我现在已经结束了到处都是 if else 语句或者难以阅读、遵循和扩展。

下面的代码是问题的简化,但很好地演示了它。我如何更好地处理这个问题(如果可能的话)

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;


}

}

最佳答案

我会将您的 if/else 语句拆分为多个函数,并对您发送到 EnableNext 的参数执行 &=。您应该只调用一次 EnableNext。

所以,例如:

// in CWorkStation::ProcessEvent
bool enableNext = true; // start with true

enableNext &= Condition1(); // of course pick better names than Condition1
enableNext &= Condition2(); // this is just for an example

EnableNext(enableNext);

Condition1() 可能是:

bool Condition1()
{
return (IsDlgButtonChecked(IDC_USEDBNAME)
&& !IsDlgButtonChecked(IDC_MAXDBNAME));
}

等等。

这里发生的是 enableNext 变量以 true 开头。然后,您执行的每个 &= 都意味着如果任何 ConditionX() 函数返回 false,则 enableNext 将以 false 结束。只有当所有条件都为真时,它才会在最后为真。

关于c++ - 在 GUI 应用程序(C++ 或 C#)中处理复杂规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2515722/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com