Использование флажка threestate для определения 3 состояний поля - PullRequest
0 голосов
/ 26 ноября 2011

В настоящее время мы вызываем веб-сервис, чтобы проверить, есть ли у пользователя разрешение на использование чата, и мы получаем 0 или 1. Я хочу добавить, чтобы также иметь возможность получить 2, что будет означать, что он включен и авторизован. сейчас поэтому я хочу использовать три флажка состояния, если они полностью заполнены, это будет означать, что он авторизован, а также в данный момент включен (вошел в систему), проверка будет означать, что он авторизован, но не включен сейчас, если флажок не установлен, у него нет разрешения для этой комнаты чата. .

Вот код, который я сейчас использую. К вашему сведению, я взял этот проект у нашего разработчика, и я в некотором роде новичок в этом, если вы можете дать мне пример даже просто для authtac1, тогда я выясню, как сделать все остальные, а также мне нужно добавить новое поле ActiveTac1 как у меня AuthTac1? Спасибо за вашу помощь.

public partial class IMeditor : Form
{
    private IMuser imu;
    private IMui IMui;
    private IMdata IMdata;

    public IMeditor(IMui IMui, IMuser U, string Member)
    {
        InitializeComponent();
        this.IMui= IMui;
        imu = U;
        if (imu.UID == 0)
        {
            Add.Text = "Add";
            imu.MemberNick= Member;
        }
        else
            Add.Text = "Update";
        IMdata = new IMdata();
        MemberHandle.Text = imu.MemberHandle;
        IM.Text = imu.IM;
        AuthChat.Checked = imu.AuthChat == 1;
        AuthTac1.Checked = imu.AuthTac1 == 1;
        AuthTac2.Checked = imu.AuthTac2 == 1;
        AuthTac3.Checked = imu.AuthTac3 == 1;
        AuthTac4.Checked = imu.AuthTac4 == 1;



        switch (imu.Transport.ToLower()) {
            case "aim":   Transport.SelectedIndex = 0; break;
            case "gtalk": Transport.SelectedIndex = 1; break;
            case "msn":   Transport.SelectedIndex = 2; break;
            case "yahoo": Transport.SelectedIndex = 3; break;

}



    private void Add_Click(object sender, EventArgs e)
    {
        IMdata.AddIM(IMui.Username, IMui.Password, imu.UID, MemberHandle.Text, Transport.Text, IM.Text,
            AuthChat.Checked ? 1 : 0, 0, 
            AuthTac1.Checked ? 1 : 0, AuthTac2.Checked ? 1 : 0, AuthTac3.Checked ? 1 : 0,
            AuthTac4.Checked ? 1 : 0);
        Close();
    }

последний вопрос, чтобы убедиться, что я ничего не напортачил @competemt_tech это то, чем я в конечном итоге воспользовался (большое спасибо за вашу помощь и нашему разработчику, который смог мне помочь)

Чтобы узнать, как установить флажки при получении данных от веб-службы, которую я использовал

 AuthChat.CheckState = GetCheckStateFromAuthCode(imu.AuthChat, imu.Enabled);
 AuthTac1.CheckState = GetCheckStateFromAuthCode(imu.AuthTac1, imu.Tac1Enabled);
 AuthTac2.CheckState = GetCheckStateFromAuthCode(imu.AuthTac2, imu.Tac2Enabled);
 AuthTac3.CheckState = GetCheckStateFromAuthCode(imu.AuthTac3, imu.Tac3Enabled);

и тогда я использовал:

 private CheckState GetCheckStateFromAuthCode(int AuthCode, int Enabled)
    {
        switch (AuthCode + Enabled)
        {
            case 0:
                return CheckState.Unchecked; // Unauthorized
            case 1:
                return CheckState.Checked;  // Authorized, not enabled
            case 2:
                return CheckState.Indeterminate; // Authorized and enabled
            default:
                return CheckState.Unchecked;
        }
    }

и после внесения изменений для отправки обратно на веб-сервис я использовал:

imu.AuthChat, imu.Enabled = GetAuthCodeFromCheckState(AuthChat.CheckState),
imu.AuthTac1, imu.Tac1Enabled = GetAuthCodeFromCheckState(AuthTac1.CheckState),
imu.AuthTac2, imu.Tac2Enabled = GetAuthCodeFromCheckState(AuthTac2.CheckState),
imu.AuthTac3, imu.Tac3Enabled = GetAuthCodeFromCheckState(AuthTac3.CheckState),

и тогда я использовал:

private int GetAuthCodeFromCheckState(CheckState checkState)
    {
        switch (checkState)
        {
            case CheckState.Unchecked:  // Unauthorized
                return 0;
            case CheckState.Indeterminate:  // Authorized, not enabled
                return 1;
            case CheckState.Checked:  // Authorized and enabled
                return 2;
            default:
                return 0;
        }
    }

1 Ответ

3 голосов
/ 26 ноября 2011

Судя по вашему коду, вы используете WinForms, а не WPF, правильно?

Если это так, то вы захотите использовать свойство CheckState флажка, а не Checked, поскольку он поддерживает три значения:

Unchecked = 0
Checked = 1
Indeterminate = 2

Обновление

Для того, чтобы удовлетворить ваши требования, вы должны иметь код, подобный следующему:

Сначала создайте функцию, которая будет генерировать правильную базу контрольного состояния по коду авторизации:

private CheckState GetCheckStateFromAuthCode(int AuthCode)
{
    switch (AuthCode)
    {
        case 0:
            // Unauthorized
            return CheckState.Unchecked;

        case 1:
            // Authorized, not enabled
            return CheckState.Indeterminate;

        case 2:
            // Authorized and enabled
            return CheckState.Checked;

        default:
            throw new ArgumentException("Unrecognized AuthCode value " + AuthCode.ToString());
    }
}

Затем используйте этот код для установки состояния ваших флажков:

AuthChat.CheckState = GetCheckStateFromAuthCode(imu.AuthChat);
AuthTac1.CheckState = GetCheckStateFromAuthCode(imu.AuthTac1);
etc.

Обновление 2

Чтобы получить код авторизации из контрольного состояния:

Сначала создайте функцию, которая будет генерировать правильную базу контрольного состояния по коду авторизации:

private int GetAuthCodeFromCheckState(CheckState checkState)
{
    switch (checkState)
    {
        case CheckState.Unchecked:
            // Unauthorized
            return 0;

        case CheckState.Indeterminate:
            // Authorized, not enabled
            return 1;

        case CheckState.Checked:
            // Authorized and enabled
            return 2;

        default:
            throw new ArgumentException("Unrecognized checkState value " + checkState.ToString());
    }
}

Затем используйте этот код для установки кода авторизации из ваших флажков:

imu.AuthChat = GetAuthCodeFromCheckState(AuthChat.CheckState);
imu.AuthTac1 = GetAuthCodeFromCheckState(AuthTac1.CheckState);
etc.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...