0

ユーザーが自分の設定を選択できるようにするために、「設定」フォームがあるアプリケーションがあります。フォームには、ユーザーが好みを選択できるラジオ ボタンがいくつかあります。別のフォームには、チェックされているボタンに応じて異なる反応を示すコードがあります。

コード/設定インターフェイスは次のとおりです。

の

private void DateStamp()
    {
        if (UserPreferences.Instance.ddmmyyyy.Checked)
        {
            int CaretPosition = richTextBoxPrintCtrl1.SelectionStart;
            string TextBefore = richTextBoxPrintCtrl1.Text.Substring(0, CaretPosition);
            string textAfter = richTextBoxPrintCtrl1.Text.Substring(CaretPosition);
            string currentDate = DateTime.Now.ToString("dd-MM-yyyy");
            richTextBoxPrintCtrl1.SelectedText = currentDate;
        }
        else if (UserPreferences.Instance.mmddyyyy.Checked)
        {
            int CaretPosition = richTextBoxPrintCtrl1.SelectionStart;
            string TextBefore = richTextBoxPrintCtrl1.Text.Substring(0, CaretPosition);
            string textAfter = richTextBoxPrintCtrl1.Text.Substring(CaretPosition);
            string currentDate = DateTime.Now.ToString("MM-dd-yyyy");
            richTextBoxPrintCtrl1.SelectedText = currentDate;
        }
        else if (UserPreferences.Instance.yyyyddmm.Checked)
        {
            int CaretPosition = richTextBoxPrintCtrl1.SelectionStart;
            string TextBefore = richTextBoxPrintCtrl1.Text.Substring(0, CaretPosition);
            string textAfter = richTextBoxPrintCtrl1.Text.Substring(CaretPosition);
            string currentDate = DateTime.Now.ToString("yyyy-dd-MM");
            richTextBoxPrintCtrl1.SelectedText = currentDate;
        }
        else if (UserPreferences.Instance.yyyymmdd.Checked)
        {
            int CaretPosition = richTextBoxPrintCtrl1.SelectionStart;
            string TextBefore = richTextBoxPrintCtrl1.Text.Substring(0, CaretPosition);
            string textAfter = richTextBoxPrintCtrl1.Text.Substring(CaretPosition);
            string currentDate = DateTime.Now.ToString("yyyy-MM-dd");
            richTextBoxPrintCtrl1.SelectedText = currentDate;
        }

ラジオ ボタンの後ろにコードはありません。修飾子はパブリックです。

私が抱えている問題は、「日付スタンプ」を追加しようとすると、「if (UserPreferences.Instance.ddmmyyyy .チェック済み)". 私は今何をすべきかわからない。

ユーザーが日付スタンプを追加しようとすると、ラジオ ボタンのチェック状態を確認し、チェックしたラジオ ボタンに対応する日付スタンプを追加する必要があります。

よろしくお願いします。

- -編集 - -

「プリファレンス」フォームで、「保存」ボタンの背後にあるコードは次のようになりました。

private void button1_Click(object sender, EventArgs e)
    {
        if (ddmmyyyy.Checked)
            DataFormat = ddmmyyyy.Text;
        else if (mmddyyyy.Checked)
            DataFormat = mmddyyyy.Text;
        else if (yyyyddmm.Checked)
            DataFormat = yyyyddmm.Text;
        else if (yyyymmdd.Checked)
            DataFormat = yyyymmdd.Text;
        //--------------------------------------------------
        if (qwerty.Checked)
            KeyboardFormat = qwerty.Text;
        else if (qwertz.Checked)
            KeyboardFormat = qwertz.Text;
        else if (azerty.Checked)
            KeyboardFormat = azerty.Text;
        else if (dvorak.Checked)
            KeyboardFormat = dvorak.Text;
        this.Close();
    }

そして、メイン フォームの文字列:

public partial class Basic_Word_Processor : Form
{
    public string keyboardFormat;
    public string dataFormat;

MainForm の「ShowDialog」コード:

private void preferencesToolStripMenuItem_Click(object sender, EventArgs e)
    {
        UserPreferences pref = new UserPreferences();
        pref.ShowDialog();

        dataFormat = pref.DataFormat;
        keyboardFormat = pref.KeyboardFormat;
    }

問題は、ボタンの「チェック済み」ステータスが保存されないことです。ダイアログが閉じられるとすぐに、以前の状態に戻ります。

4

1 に答える 1

1

この例を理解することで、あなたがやろうとしていることができると思います:

Form1I want to show User Choices in this formというメイン フォームがあります。Preferencesまた、ユーザーが日付形式とキーボード レイアウトを選択できるように、という新しいフォームを追加しました。

私のラジオボタンは次のように命名されています:

RB_D_1
RB_D_2
.
.
.

ユーザーがクリックした後、Submit Changesどの radioButton が選択されているかを確認し、そのTextプロパティ (例RB_D_1.text: "dd/MM/yyyy" ) をPublic String Variable呼び出しDateFormat先に保存します。

    public string DataFormat, KeyboardFormat;

    private void CMDSubmit_Click(object sender, EventArgs e)
    {
        if (RB_D_1.Checked)
            DataFormat = RB_D_1.Text;
        else if (RB_D_2.Checked)
            DataFormat = RB_D_2.Text;
        else if (RB_D_3.Checked)
            DataFormat = RB_D_3.Text;
        else if (RB_D_4.Checked)
            DataFormat = RB_D_4.Text;
        else
            DataFormat = "MM/DD/YYYY"; // default format

        //--------------------------------

        if (RB_L_1.Checked)
            KeyboardFormat = RB_L_1.Text;
        else if (RB_L_2.Checked)
            KeyboardFormat = RB_L_2.Text;
        else if (RB_L_3.Checked)
            KeyboardFormat = RB_L_3.Text;
        else if (RB_L_4.Checked)
            KeyboardFormat = RB_L_4.Text;
        else
            KeyboardFormat = "QWERTY"; // default format


        this.Close();
    }

これで、ユーザーの選択を 2 つの文字列変数に保存したので、Form1

Form1ユーザーがクリックするたびに、フォームSettingからオブジェクトを作成しPreferences、設定フォームを閉じた後にそれをユーザーに表示します。既に説明した 2 つの文字列変数をチェックし、それらの結果をどうするかを決定します。

たとえば、これらの結果を別の 2 つの文字列変数に格納し、次のように表示しました。TextBoxes

    private void CMDSettings_Click(object sender, EventArgs e)
    {
        // showing the Preferences form to user 
        Preferences pref = new Preferences();
        pref.ShowDialog();

        // getting results from Preferences Form
        dateFormat = pref.DataFormat;
        keyboardFormat = pref.KeyboardFormat;

        // Showing the Result in TextBoxes
        textBox1.Text = dateFormat ;
        textBox2.Text = keyboardFormat;
    }

更新 2:

次のように変更DateStamp()します。

private void DateStamp()
{
    if (dateFormat.ToUpper() == "DD/MM/YYYY")
    {
        int CaretPosition = richTextBoxPrintCtrl1.SelectionStart;
        string TextBefore = richTextBoxPrintCtrl1.Text.Substring(0, CaretPosition);
        string textAfter = richTextBoxPrintCtrl1.Text.Substring(CaretPosition);
        string currentDate = DateTime.Now.ToString("dd-MM-yyyy");
        richTextBoxPrintCtrl1.SelectedText = currentDate;
    }
    else if (dateFormat.ToUpper() == "MM/DD/YYYY")
    {
        int CaretPosition = richTextBoxPrintCtrl1.SelectionStart;
        string TextBefore = richTextBoxPrintCtrl1.Text.Substring(0, CaretPosition);
        string textAfter = richTextBoxPrintCtrl1.Text.Substring(CaretPosition);
        string currentDate = DateTime.Now.ToString("MM-dd-yyyy");
        richTextBoxPrintCtrl1.SelectedText = currentDate;
    }
    else if (dateFormat.ToUpper() == "YYYY/DD/MM")
    {
        int CaretPosition = richTextBoxPrintCtrl1.SelectionStart;
        string TextBefore = richTextBoxPrintCtrl1.Text.Substring(0, CaretPosition);
        string textAfter = richTextBoxPrintCtrl1.Text.Substring(CaretPosition);
        string currentDate = DateTime.Now.ToString("yyyy-dd-MM");
        richTextBoxPrintCtrl1.SelectedText = currentDate;
    }
    else if (dateFormat.ToUpper() == "YYYY/MM/DD")
    {
        int CaretPosition = richTextBoxPrintCtrl1.SelectionStart;
        string TextBefore = richTextBoxPrintCtrl1.Text.Substring(0, CaretPosition);
        string textAfter = richTextBoxPrintCtrl1.Text.Substring(CaretPosition);
        string currentDate = DateTime.Now.ToString("yyyy-MM-dd");
        richTextBoxPrintCtrl1.SelectedText = currentDate;
    }

}

更新 3:

ユーザーの選択を記憶するには、次のようにします。

この関数をに追加しますPreferences

    public void UpdateUserChoice(string date,string keyboard)
    {
        if (date == RB_D_1.Text)
            RB_D_1.Checked = true;
        else if (date == RB_D_2.Text)
            RB_D_2.Checked = true;
        else if (date == RB_D_3.Text)
            RB_D_3.Checked = true;
        else if (date == RB_D_4.Text)
            RB_D_4.Checked = true; 

        //---------------------------

        if (keyboard == RB_L_1.Text)
            RB_L_1.Checked = true;
        else if (keyboard == RB_L_2.Text)
            RB_L_2.Checked = true;
        else if (keyboard == RB_L_3.Text)
            RB_L_3.Checked = true;
        else if (keyboard == RB_L_4.Text)
            RB_L_4.Checked = true; 
    }

次のようにユーザーに表示する古い方法を変更します。

    private void CMDSettings_Click(object sender, EventArgs e)
    {
        Preferences pref = new Preferences();
        pref.UpdateUserChoice(dateFormat, keyboardFormat);
        pref.ShowDialog();
        dateFormat = pref.DataFormat;
        keyboardFormat = pref.KeyboardFormat;
        textBox2.Text = keyboardFormat;
    } 
于 2013-05-12T12:38:49.877 に答える