如何实时检查数据是否从其中一个类输入到文本框?

发布于 2024-12-13 23:23:04 字数 8308 浏览 4 评论 0原文

我的问题来自我现在遇到的一个问题。我有 MainWindow、AuthenticateWindow 和 AddEntryWindow,它们都是 WinForms。在主窗口中,我可以进行身份​​验证并将条目添加到我的主窗口文本框中。他们在进行身份验证之前无法添加条目(这没有问题)。我需要在文本框中添加一个条目,这将更新我的主窗口文本框。问题是,如何检查条目是否已添加到我的文本框中?

我正在尝试从菜单栏中选择“保存”选项。每当我尝试保存空文件时都会收到错误。如何通过“保存”按钮首先禁用它并在添加条目后启用它来验证保存过程?

我总是可以验证文本框是否有条目,但我想首先禁用按钮,并在添加条目后启用按钮。目前我没有特权这样做。

如果我不够清楚,请提问。

private void tsmiSave_Click(object sender, EventArgs e)
{
    // Open sfdSaveToLocation which let us choose the
    // location where we want to save the file.
    if (txtDisplay.Text != string.Empty)
    {
        sfdSaveToLocation.ShowDialog();
    }
}

MainWindow.cs

using System;
using System.IO;
using System.Windows.Forms;

namespace Store_Passwords_and_Serial_Codes
{
    public partial class MainWindow : Form
    {
        private AuthenticateUser storedAuth;

        public MainWindow()
        {
            InitializeComponent();
        }

        private void MainWindow_Load(object sender, EventArgs e)
        {
            // Prohibit editing.
            txtDisplay.Enabled = false;
        }

        public string ChangeTextBox
        {
            get
            {
                return this.txtDisplay.Text;
            }
            set
            {
                this.txtDisplay.Text = value;
            }
        }

        private void tsmiAuthenticate_Click(object sender, EventArgs e)
        {
            AuthenticationWindow authWindow = new AuthenticationWindow();
            authWindow.ShowDialog();
            storedAuth = authWindow.Result;
        }

        private void tsmiAddEntry_Click(object sender, EventArgs e)
        {
            if (storedAuth == null)
            {
                DialogResult result = MessageBox.Show
                    ("You must log in before you add an entry." 
                    + Environment.NewLine + "You want to authenticate?",
                    "Information", MessageBoxButtons.YesNo, 
                    MessageBoxIcon.Information);

                if (result == DialogResult.Yes)
                {
                    AuthenticationWindow authWindow = 
                        new AuthenticationWindow();
                    authWindow.ShowDialog();
                    storedAuth = authWindow.Result;

                    AddEntryWindow addWindow = new AddEntryWindow
                        (this, storedAuth.UserName, storedAuth.Password);
                    addWindow.ShowDialog();
                }
            }
            else
            {
                AddEntryWindow addWindow = new AddEntryWindow
                    (this, storedAuth.UserName, storedAuth.Password);
                addWindow.ShowDialog();
            }
        }

        private void tsmiClose_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void tsmiSave_Click(object sender, EventArgs e)
        {
            // Open sfdSaveToLocation which let us choose the
            // location where we want to save the file.
            sfdSaveToLocation.ShowDialog();
        }

        private void sfdSaveToLocation_FileOk(object sender, System.ComponentModel.CancelEventArgs e)
        {
            string theFileName = sfdSaveToLocation.FileName;

            EncryptDecrypt en = new EncryptDecrypt();

            string encrypted = en.Encrypt(txtDisplay.Text,
                storedAuth.UserName, storedAuth.Password);

            MessageBox.Show(encrypted);

            File.WriteAllText(theFileName, encrypted);
        }
    }
}

AddEntryWindow.cs

using System;
using System.Windows.Forms;
// Needed to be used with StringBuilder
using System.Text;
// Needed to be used with ArrayList.
using System.Collections;

namespace Store_Passwords_and_Serial_Codes
{
    public partial class AddEntryWindow : Form
    {
        string user, pass;

        // Initializind ArrayList to store all data needed to be added or retrived.
        private ArrayList addedEntry = new ArrayList();

        // Initializing MainWindow form.
        MainWindow mainWindow;

        // Default constructor to initialize the form.
        public AddEntryWindow()
        {
            InitializeComponent();
        }

        public AddEntryWindow(MainWindow viaParameter, string user, string pass)
            : this()
        {
            mainWindow = viaParameter;
            this.user = user;
            this.pass = pass;
        }

        private void AddEntryWindow_Load(object sender, EventArgs e)
        { }

        private void btnAddEntry_Click(object sender, EventArgs e)
        {
            // Making sure that type is selected.
            if (cmbType.SelectedIndex == -1)
            {
                MessageBox.Show("Please select entry type!", "Error!", 
                    MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            // Each field must be filled for specified type.
            // Here we are checking if all fields were filled.
            else if ((cmbType.SelectedIndex == 0 && (txtUserName.Text == string.Empty || txtPassword.Text == string.Empty)) ||
                (cmbType.SelectedIndex == 1 && (txtURL.Text == string.Empty || txtPassword.Text == string.Empty)) ||
                (cmbType.SelectedIndex == 2 && (txtSoftwareName.Text == string.Empty || txtSerialCode.Text == string.Empty)))
            {
                MessageBox.Show("Please fill all the fields!", "Error!", 
                    MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                int totalEntries = 0;

                if(cmbType.SelectedIndex == 0)
                    addedEntry.Add(new AddPC(cmbType.Text, 
                        txtUserName.Text, txtPassword.Text));

                else if(cmbType.SelectedIndex == 1)
                    addedEntry.Add(new AddWebSite(cmbType.Text, 
                        txtUserName.Text, txtPassword.Text, txtURL.Text));

                else if(cmbType.SelectedIndex == 2)
                    addedEntry.Add(new AddSerialCode(cmbType.Text, 
                        txtSoftwareName.Text, txtSerialCode.Text));

                StringBuilder stringBuilder = new StringBuilder();

                foreach (var list in addedEntry)
                {
                    if (list is AddPC)
                    {
                        totalEntries++;
                        AddPC tmp = (AddPC)list;
                        stringBuilder.Append(tmp.ToString());
                    }
                    else if (list is AddWebSite)
                    {
                        totalEntries++;
                        AddWebSite tmp = (AddWebSite)list;
                        stringBuilder.Append(tmp.ToString());
                    }
                    else if (list is AddSerialCode)
                    {
                        totalEntries++;
                        AddSerialCode tmp = (AddSerialCode)list;
                        stringBuilder.Append(tmp.ToString());
                    }
                }

                mainWindow.ChangeTextBox = stringBuilder.ToString();

                mainWindow.tsslStatus.Text = "A total of " + totalEntries + " entries added.";

                // Clearing all fields.
                ClearFields();
            }
        }

        private void btnClear_Click(object sender, EventArgs e)
        {
            ClearFields();
        }

        private void btnClose_Click(object sender, EventArgs e)
        {
            // Closing the Add Entry Window form.
            this.Close();
        }

        private void cmbType_SelectedIndexChanged(object sender, EventArgs e)
        {
            // Deciding which data must be entered depending on
            // what type is selected from combo box.

            // PC
            if (cmbType.SelectedIndex == 0)
            {}
            // Web Site
            else if (cmbType.SelectedIndex == 1)
            {}
            // Serial Code
            else if (cmbType.SelectedIndex == 2)
            {}
        }

        private void ClearFields()
        {
            // Clearing all fields to the default state.
        }
    }
}

问候。

My question comes from a problem which I have right now. I have MainWindow, AuthenticateWindow, and AddEntryWindow which all are WinForms. In main window I have possibility to Authenticate and Add Entry into my main windows textbox. They can not add an entry until they authenticate (no problem with this). I need to add an entry to the text box which will update my main windows textbox. The problem if, how can I check if entry was added to my textbox?

I am trying to have a Save option from menu strip. I am getting an error whenever I am trying to save an empty file. How could I authenticate the saving process by Save button by having it first disabled, and enabled after entry was added?

I could always verify if if textbox had an entry but I want to have button disabled first, and enabled after entry was added. I do not have a privilege to do so as of right now.

Please ask questions if I am not clear enough.

private void tsmiSave_Click(object sender, EventArgs e)
{
    // Open sfdSaveToLocation which let us choose the
    // location where we want to save the file.
    if (txtDisplay.Text != string.Empty)
    {
        sfdSaveToLocation.ShowDialog();
    }
}

MainWindow.cs

using System;
using System.IO;
using System.Windows.Forms;

namespace Store_Passwords_and_Serial_Codes
{
    public partial class MainWindow : Form
    {
        private AuthenticateUser storedAuth;

        public MainWindow()
        {
            InitializeComponent();
        }

        private void MainWindow_Load(object sender, EventArgs e)
        {
            // Prohibit editing.
            txtDisplay.Enabled = false;
        }

        public string ChangeTextBox
        {
            get
            {
                return this.txtDisplay.Text;
            }
            set
            {
                this.txtDisplay.Text = value;
            }
        }

        private void tsmiAuthenticate_Click(object sender, EventArgs e)
        {
            AuthenticationWindow authWindow = new AuthenticationWindow();
            authWindow.ShowDialog();
            storedAuth = authWindow.Result;
        }

        private void tsmiAddEntry_Click(object sender, EventArgs e)
        {
            if (storedAuth == null)
            {
                DialogResult result = MessageBox.Show
                    ("You must log in before you add an entry." 
                    + Environment.NewLine + "You want to authenticate?",
                    "Information", MessageBoxButtons.YesNo, 
                    MessageBoxIcon.Information);

                if (result == DialogResult.Yes)
                {
                    AuthenticationWindow authWindow = 
                        new AuthenticationWindow();
                    authWindow.ShowDialog();
                    storedAuth = authWindow.Result;

                    AddEntryWindow addWindow = new AddEntryWindow
                        (this, storedAuth.UserName, storedAuth.Password);
                    addWindow.ShowDialog();
                }
            }
            else
            {
                AddEntryWindow addWindow = new AddEntryWindow
                    (this, storedAuth.UserName, storedAuth.Password);
                addWindow.ShowDialog();
            }
        }

        private void tsmiClose_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void tsmiSave_Click(object sender, EventArgs e)
        {
            // Open sfdSaveToLocation which let us choose the
            // location where we want to save the file.
            sfdSaveToLocation.ShowDialog();
        }

        private void sfdSaveToLocation_FileOk(object sender, System.ComponentModel.CancelEventArgs e)
        {
            string theFileName = sfdSaveToLocation.FileName;

            EncryptDecrypt en = new EncryptDecrypt();

            string encrypted = en.Encrypt(txtDisplay.Text,
                storedAuth.UserName, storedAuth.Password);

            MessageBox.Show(encrypted);

            File.WriteAllText(theFileName, encrypted);
        }
    }
}

AddEntryWindow.cs

using System;
using System.Windows.Forms;
// Needed to be used with StringBuilder
using System.Text;
// Needed to be used with ArrayList.
using System.Collections;

namespace Store_Passwords_and_Serial_Codes
{
    public partial class AddEntryWindow : Form
    {
        string user, pass;

        // Initializind ArrayList to store all data needed to be added or retrived.
        private ArrayList addedEntry = new ArrayList();

        // Initializing MainWindow form.
        MainWindow mainWindow;

        // Default constructor to initialize the form.
        public AddEntryWindow()
        {
            InitializeComponent();
        }

        public AddEntryWindow(MainWindow viaParameter, string user, string pass)
            : this()
        {
            mainWindow = viaParameter;
            this.user = user;
            this.pass = pass;
        }

        private void AddEntryWindow_Load(object sender, EventArgs e)
        { }

        private void btnAddEntry_Click(object sender, EventArgs e)
        {
            // Making sure that type is selected.
            if (cmbType.SelectedIndex == -1)
            {
                MessageBox.Show("Please select entry type!", "Error!", 
                    MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            // Each field must be filled for specified type.
            // Here we are checking if all fields were filled.
            else if ((cmbType.SelectedIndex == 0 && (txtUserName.Text == string.Empty || txtPassword.Text == string.Empty)) ||
                (cmbType.SelectedIndex == 1 && (txtURL.Text == string.Empty || txtPassword.Text == string.Empty)) ||
                (cmbType.SelectedIndex == 2 && (txtSoftwareName.Text == string.Empty || txtSerialCode.Text == string.Empty)))
            {
                MessageBox.Show("Please fill all the fields!", "Error!", 
                    MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                int totalEntries = 0;

                if(cmbType.SelectedIndex == 0)
                    addedEntry.Add(new AddPC(cmbType.Text, 
                        txtUserName.Text, txtPassword.Text));

                else if(cmbType.SelectedIndex == 1)
                    addedEntry.Add(new AddWebSite(cmbType.Text, 
                        txtUserName.Text, txtPassword.Text, txtURL.Text));

                else if(cmbType.SelectedIndex == 2)
                    addedEntry.Add(new AddSerialCode(cmbType.Text, 
                        txtSoftwareName.Text, txtSerialCode.Text));

                StringBuilder stringBuilder = new StringBuilder();

                foreach (var list in addedEntry)
                {
                    if (list is AddPC)
                    {
                        totalEntries++;
                        AddPC tmp = (AddPC)list;
                        stringBuilder.Append(tmp.ToString());
                    }
                    else if (list is AddWebSite)
                    {
                        totalEntries++;
                        AddWebSite tmp = (AddWebSite)list;
                        stringBuilder.Append(tmp.ToString());
                    }
                    else if (list is AddSerialCode)
                    {
                        totalEntries++;
                        AddSerialCode tmp = (AddSerialCode)list;
                        stringBuilder.Append(tmp.ToString());
                    }
                }

                mainWindow.ChangeTextBox = stringBuilder.ToString();

                mainWindow.tsslStatus.Text = "A total of " + totalEntries + " entries added.";

                // Clearing all fields.
                ClearFields();
            }
        }

        private void btnClear_Click(object sender, EventArgs e)
        {
            ClearFields();
        }

        private void btnClose_Click(object sender, EventArgs e)
        {
            // Closing the Add Entry Window form.
            this.Close();
        }

        private void cmbType_SelectedIndexChanged(object sender, EventArgs e)
        {
            // Deciding which data must be entered depending on
            // what type is selected from combo box.

            // PC
            if (cmbType.SelectedIndex == 0)
            {}
            // Web Site
            else if (cmbType.SelectedIndex == 1)
            {}
            // Serial Code
            else if (cmbType.SelectedIndex == 2)
            {}
        }

        private void ClearFields()
        {
            // Clearing all fields to the default state.
        }
    }
}

Regards.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

相守太难 2024-12-20 23:23:04

听起来您可能只想订阅TextChanged 事件,每当文本框中的文本发生更改时就会触发该事件。

我不能说我真的遵循了您所做的一切,但我认为您应该在该事件处理程序中启用或禁用“保存”按钮即可。

编辑:目前还不清楚所有不同的组件位于何处,但您想要类似的东西:

// Put this after the InitializeComponent() call in the constructor.
txtDisplay.TextChanged += HandleTextBoxTextChanged;

...

private void HandleTextBoxTextChanged(object sender, EventArgs e)
{
    bool gotText = txtDisplay.Text.Length > 0;
    menuSaveButton.Enabled = gotText;
}

我还强烈建议您不要使用 ArrayList 而是使用通用 < code>List类型。非泛型集合几乎不应该在新代码中使用。

It sounds like you probably just want to subscribe to the TextChanged event, which will be fired whenever the text in the textbox changes.

I can't say I really followed everything that you're doing, but I think you should be fine to just enable or disable your Save button within that event handler.

EDIT: It's not really clear where all your different components live, but you want something like:

// Put this after the InitializeComponent() call in the constructor.
txtDisplay.TextChanged += HandleTextBoxTextChanged;

...

private void HandleTextBoxTextChanged(object sender, EventArgs e)
{
    bool gotText = txtDisplay.Text.Length > 0;
    menuSaveButton.Enabled = gotText;
}

I'd also strongly advise you not to use ArrayList but to use the generic List<T> type. The non-generic collections should almost never be used in new code.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文