繁体   English   中英

C ++ MFC创建编辑控件可以拥有的最大数量

[英]c++ mfc create maximum number an edit control can have

使用以下代码,我已经设法通过单击按钮来使用值更新编辑控制框。

void SomeDlg::OnBnClickedValue2Plus2()
{
    m_control1.GetWindowText(m_value1);
    m_control2.GetWindowText(m_value2);
    m_control3.GetWindowText(m_value3);
    int a,b,c;
    if (m_getcheck.GetCheck() == 1 
        && _ttoi(m_value2) < 40 
        && _ttoi(m_totalvalue) < 100)
    {
        a = _ttoi(m_value1);
        b = _ttoi(m_value2) + 2;
        c = a + b;
        GetDlgItem(IDC_EDIT1)->SetWindowText(_itot(b, buff, 10)); 
        GetDlgItem(IDC_EDIT3)->SetWindowText(_itot(c, buff, 10));
    }
}

void SomeDlg::OnBnClickedValue3Plus3()
{
    m_control1.GetWindowText(m_value1);
    m_control2.GetWindowText(m_value2);
    m_control3.GetWindowText(m_value3);
    int a,b,c;
    if (m_getcheck.GetCheck() == 1 
        && _ttoi(m_value1) < 40 
        && _ttoi(m_totalvalue) < 100)
    {
        a = _ttoi(m_value1) + 3;
        b = _ttoi(m_value2);
        c = a + b;
        GetDlgItem(IDC_EDIT2)->SetWindowText(_itot(a, buff, 10)); 
        GetDlgItem(IDC_EDIT3)->SetWindowText(_itot(c, buff, 10));
    }
}

当按下plus2或plus 3按钮时,有3个编辑控件会更新。 当按下plus2时,edit1将更新为+2,当按下plus3时,edit2将更新为+3。 第三个编辑控件将显示edit1 + edit2的总数,其中edit1最多为100,edit2最多为40。

但是,情况并非如此,如果按钮被按下时该数字相同或超过限制,则值将不会更改,但是如果值为39且我加了3,它将变为42而不是40,然后变为inactive。

我将如何为编辑控件设置最大值?

问题是您在修改值之前先检查它们。 只需像这样更改两个“ if”语句

if (m_getcheck.GetCheck() == 1 
    && (_ttoi(m_value2 ) + 2 ) <= 40 
    && (_ttoi(m_totalvalue ) + 2 ) <= 100)

if (m_getcheck.GetCheck() == 1 
    && ( _ttoi(m_value1 ) + 3 ) <= 40 
    && ( _ttoi(m_totalvalue) + 3 ) <= 100)

我还更改了<in <=,因为您说1和2的MAX值为40,总值为100。

我通过改变解决了我的问题

void SomeDlg::OnBnClickedValue3Plus3()
{
    m_control1.GetWindowText(m_value1);
    m_control2.GetWindowText(m_value2);
    m_control3.GetWindowText(m_value3);
    int a,b,c;
    if (m_getcheck.GetCheck() == 1 
        && _ttoi(m_value1) < 40 
        && _ttoi(m_totalvalue) < 100)
    {
        a = _ttoi(m_value1) + 3;
        b = _ttoi(m_value2);
        c = a + b;
        GetDlgItem(IDC_EDIT2)->SetWindowText(_itot(a, buff, 10)); 
        GetDlgItem(IDC_EDIT3)->SetWindowText(_itot(c, buff, 10));
    }    
}

对此

void SomeDlg::OnBnClickedValue3Plus3()
{
    m_control1.GetWindowText(m_value1);
    m_control2.GetWindowText(m_value2);
    m_control3.GetWindowText(m_value3);
    BOOL max1 = 40;
    BOOL max2 = 100;
    int a,b,c;
    a = _ttoi(m_value1) + 3;
    b = _ttoi(m_value2);
    c = a + b;

    if (m_getcheck.GetCheck() == 1 
        && a <= max1
        && c <= max2)
    {
        GetDlgItem(IDC_EDIT2)->SetWindowText(_itot(a, buff, 10)); 
        GetDlgItem(IDC_EDIT3)->SetWindowText(_itot(c, buff, 10));
    }
}

这意味着当值是39,并且我尝试加3时没有任何反应。 但是,如果我加1则达到40,这就是我想首先使用的方式,我只是认为如果我尝试将3加到39,则将数字更改为最大值会更简单。按照我最初的意图进行操作要容易得多。 感谢所有的帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM