3

メモをテキストファイルに追跡する簡単なプログラムを作成しています。チェックボックスを除いて、すべてが正しく機能しています。必要なチェックボックスを選択して、同じ行のファイルに書き込むことができる場所に必要です。チェックボックスが選択されていないか、一部のみが選択されている場合は、次の行にも移動します。以下は私が現在持っているコードであり、これまでのところ正常に機能していますが、各チェックボックスステートメントでWritelineを使用すると、明らかに各チェックボックステキストが新しい行に配置されます。Writeのみを使用すると、「tshooting_text.Textはチェックボックスのテキストと同じ行になります。C#とプログラミング全般に少し慣れていないので、簡単なものがない場合はご容赦ください。とにかくここにあります。私がこれまでに持っているコード。

private void copy_clipboard_button_Click(object sender, EventArgs e)
{

    //Starts the file writer
    using (StreamWriter sw = new StreamWriter("C:\\INET Portal Notes.txt"))
    {
        string CBRSame = cust_btn_text.Text;
        if (cbr_same.Checked)
        {
            cust_callback_text.Text = CBRSame;
        }

        //Writes textboxes to the file
        sw.WriteLine("**Name: " + cust_name_text.Text);
        sw.WriteLine("**BTN: " + cust_btn_text.Text);  
        sw.WriteLine("**CBR: " + cust_callback_text.Text);
        sw.WriteLine("**Modem: " + cust_modem_text.Text);
        //Statements to write checkboxes to file
        if (checkbox_pwr.Checked)
            sw.Write("**Lights: PWR, ");
        if (checkbox_e1.Checked)
            sw.Write("E1, ");
        if (checkbox_e2.Checked)
            sw.Write("E2, ");
        if (checkbox_e3.Checked)
            sw.Write("E3, ");
        if (checkbox_e4.Checked)
            sw.Write("E4, ");
        if (checkbox_wlan.Checked)
            sw.Write("WLAN, ");
        if (checkbox_dsl.Checked)
            sw.Write("DSL, ");
        if (checkbox_dslblink.Checked)
            sw.Write("DSL Blinking, ");
        if (checkbox_inet.Checked)
            sw.Write("INET, ");
        if (checkbox_inetred.Checked)
            sw.Write("INET RED, ");

        //Continues textboxes to file
        sw.WriteLine("**Troubleshooting: " + tshooting_text.Text);
        sw.WriteLine("**Services Offered: " + services_offered_text.Text);
        sw.WriteLine("**Other Notes: " + other_notes_text.Text);
        sw.Flush();
    }
}
4

2 に答える 2

1
 // ...
 if (checkbox_inetred.Checked)
        sw.Write("INET RED, ");

 sw.WriteLine (); // <--- this is new, means: insert line break

 //Continues textboxes to file
 sw.WriteLine("**Troubleshooting: " + tshooting_text.Text);

 // ...
于 2012-09-02T21:48:57.220 に答える
1

私の提案は次のとおりです。

  1. CheckBoxすべてのコントロールをコントロール内に置き、Panelそれを呼び出しましょうpnlCheckBoxes
  2. 目的のインジケータをCheckBoxTagプロパティに入力します(設計時)。
  3. 必要に応じてチェックボックスを注文します。
  4. すべてのチェックボックスを列挙し、それぞれの出力テキストを書き込みます。

このようにして、チェックボックスを簡単に追加/削除でき、これらの変更を反映するためにコードを変更する必要はありません。

コントロール内でチェックボックスを注文する方法は次のとおりですPanel(不明な場合は、残りのコードを変更しないでください)。Form1.designer.csファイルのコードを変更します。

// 
// pnlCheckBoxes
//
// Rearrange the lines below to match the order you desire
this.pnlCheckBoxes.Controls.Add(this.checkBoxWlan);
this.pnlCheckBoxes.Controls.Add(this.checkBoxDsl);
// Leave the lines below intact.
this.pnlCheckBoxes.Location = new System.Drawing.Point(21, 110);
this.pnlCheckBoxes.Name = "pnlCheckBoxes";
this.pnlCheckBoxes.Size = new System.Drawing.Size(200, 100);
this.pnlCheckBoxes.TabIndex = 6;

ライター関数のコードは次のとおりです(パネルにチェックボックスを配置し、Tagプロパティを割り当てて配置した後)。

private void copy_clipboard_button_Click(object sender, EventArgs e)
{
    //Starts the file writer
    using (StreamWriter sw = new StreamWriter("C:\\INET Portal Notes.txt"))
    {
        /* ... */

        //Statements to write checkboxes to file

        // This variable will store your whole line for check boxes.
        string checkBoxesLine = "**";

        // Enumerate all controls in panel.
        foreach (Control control in pnlCheckBoxes.Controls)
        {
            // Make sure the control is CheckBox, ignore others.
            if (control is CheckBox)
            {
                // Cast it to CheckBox variable, to make it easier to work with.
                CheckBox checkBox = (CheckBox)control;

                // Make sure it is checked, and if it is, make sure that the Tag property
                // has been set to string, so that we can get it's ID (WLAN, DSL, etc.).
                if (checkBox.Checked && checkBox.Tag is string)
                {
                    // Cast tag to string.
                    string checkBoxId = (string)checkBox.Tag;
                    // Append tag and comma to the end of the line.
                    checkBoxesLine += string.Format("{0}, ", checkBoxId);
                }
            }
        }

        // That's it, we have the whole line, write it as a new line.
        sw.WriteLine(checkBoxesLine);

        //Continues textboxes to file
        /* ... */ 
    }
}

上記のコードは短縮できますが、C#を初めて使用するため、できる限り説明するようにしています。

答えは質問の範囲から少し外れていますが、ここではいくつかの機能(コントロールの列挙、オブジェクトのキャスト、文字列の書式設定)を示しました。これらが、将来のC#プロジェクトで役立つことを願っています。

于 2012-09-02T22:09:50.930 に答える