none
Listbox中的值在選擇按確定後可以連接到另一個csv的資料呢? RRS feed

  • 問題

  • 請問大大,如果我用Listbox選擇了下列任何一種茶類(tea.csv中含有紅茶、綠茶、青茶、奶茶、烏龍茶這幾種茶類),當我按”確定”後他會跳到另個一個畫面,而另個畫面是選擇飲料中容量cc數的,也是用Listbox來表示。
    例如 當我選擇紅茶時,只會跳這三個 500cc 700cc 1000cc
    當我選擇綠茶時,只會跳這三個250cc 500cc 900cc
    以此類推
    那在boutton1中,我該如何撰寫程式碼,才能依照我選擇的茶類,連到另一個cc.csv檔呈現出該類茶的cc數呢?
    Ps:容量cc數的cc.csv檔資料如下
    第一行 500cc 700cc 1000cc
    第二行 250cc 500cc 900cc

     


           public partial class areacode : Form
        {
            string[] ary;
            string[] ary2;

            int lngAbsPos = 0;//用來判斷目前要讀取第幾筆資料ㄉ索引值
            int lngRcdCnt = 0;//用來判斷比數ㄉ最大值是多少
            public areacode()
            {
                InitializeComponent();
            }

            private void areacode_Load(object sender, EventArgs e)
            {
                FileStream fs = new FileStream(@"\My Documents\tea.csv", FileMode.Open);
                StreamReader sr = new StreamReader(fs, System.Text.Encoding.UTF8);
                string[] ary = sr.ReadToEnd().Split("\n".ToCharArray());//ToCharArray()將這個執行個體中的字元複製到Unicode 字元陣列中。

              
                ary2 = ary.GetValue(lngAbsPos).ToString().Split(",".ToCharArray());
                for (int i = 0; i < ary2.Length; i++)
                    listBox1.Items.Add(ary2.GetValue(i).ToString());
                fs.Close();
            }

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

    2007年7月25日 上午 02:12

解答

  •   

    以下是做法的一種,只是我把Button的動作移到SelectedIndexChanged的事件. 把CC加到listbox2去.

    Code Snippet

          private void Form1_Load(object sender, EventArgs e)
            {
                FileStream fs = new FileStream(@"tea.csv", FileMode.Open);
                StreamReader sr = new StreamReader(fs, System.Text.Encoding.Default);
                string strTea=sr.ReadToEnd();
                fs.Close();
                string[] ary = strTea.Split("\r\n".ToCharArray());
                foreach (string tea in ary)
                {
                    if (tea.Length > 0)
                    {
                        listBox1.Items.Add(tea);
                    }
                }
                listBox1.SelectedIndex = 0;
            }

            private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
            {
                FileStream fs = new FileStream(@"cc.csv", FileMode.Open);
                StreamReader sr = new StreamReader(fs, System.Text.Encoding.Default);
                string strCC = sr.ReadToEnd();
                fs.Close();
                string[] aryCC = strCC.Split("\r\n".ToCharArray());
                listBox2.Items.Clear();
                foreach (string cc in aryCC)
                {
                    string[] teacc = cc.Split(",".ToCharArray());
                    if (teacc[0] == listBox1.Text)
                    {
                        for (int c = 1; c < teacc.Length;c++ )
                        {
                            listBox2.Items.Add(teacc[c].ToString());
                        }
                        break;
                    }
                }
            }

     

    我用的檔案內容如下

    tea.csv

    紅茶

    綠茶

    奶茶

    cc.csv

    紅茶,200CC,500CC,700CC

    綠茶,300CC,500CC,700CC

    奶茶,400CC,500CC,700CC

     

    可以發現我在cc.csv的每行前面加上了茶的名稱,因為這是一個索引值,不然怎麼知道這個茶在第幾行,如果寫死在程式內,下次換行就慘了.

     

    2007年7月25日 上午 04:00

所有回覆

  •   

    以下是做法的一種,只是我把Button的動作移到SelectedIndexChanged的事件. 把CC加到listbox2去.

    Code Snippet

          private void Form1_Load(object sender, EventArgs e)
            {
                FileStream fs = new FileStream(@"tea.csv", FileMode.Open);
                StreamReader sr = new StreamReader(fs, System.Text.Encoding.Default);
                string strTea=sr.ReadToEnd();
                fs.Close();
                string[] ary = strTea.Split("\r\n".ToCharArray());
                foreach (string tea in ary)
                {
                    if (tea.Length > 0)
                    {
                        listBox1.Items.Add(tea);
                    }
                }
                listBox1.SelectedIndex = 0;
            }

            private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
            {
                FileStream fs = new FileStream(@"cc.csv", FileMode.Open);
                StreamReader sr = new StreamReader(fs, System.Text.Encoding.Default);
                string strCC = sr.ReadToEnd();
                fs.Close();
                string[] aryCC = strCC.Split("\r\n".ToCharArray());
                listBox2.Items.Clear();
                foreach (string cc in aryCC)
                {
                    string[] teacc = cc.Split(",".ToCharArray());
                    if (teacc[0] == listBox1.Text)
                    {
                        for (int c = 1; c < teacc.Length;c++ )
                        {
                            listBox2.Items.Add(teacc[c].ToString());
                        }
                        break;
                    }
                }
            }

     

    我用的檔案內容如下

    tea.csv

    紅茶

    綠茶

    奶茶

    cc.csv

    紅茶,200CC,500CC,700CC

    綠茶,300CC,500CC,700CC

    奶茶,400CC,500CC,700CC

     

    可以發現我在cc.csv的每行前面加上了茶的名稱,因為這是一個索引值,不然怎麼知道這個茶在第幾行,如果寫死在程式內,下次換行就慘了.

     

    2007年7月25日 上午 04:00
  • 請問大大cc.csv能寫到另外一個表單嗎?  就紅茶 綠茶 奶茶是form1按確定後變紅茶,200CC,500CC,700CC

    綠茶,300CC,500CC,700CC 奶茶,400CC,500CC,700CC是form2

     

     

    2007年7月25日 上午 05:39
  • Form1

     

    Code Snippet

     public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }

            private void Form1_Load(object sender, EventArgs e)
            {
                FileStream fs = new FileStream(@"tea.csv", FileMode.Open);
                StreamReader sr = new StreamReader(fs, System.Text.Encoding.Default);
                string strTea = sr.ReadToEnd();
                fs.Close();
                string[] ary = strTea.Split("\r\n".ToCharArray());
                foreach (string tea in ary)
                {
                    if (tea.Length > 0)
                    {
                        listBox1.Items.Add(tea);
                    }
                }
            }

            private void button1_Click(object sender, EventArgs e)
            {
                Form2 obj = new Form2(listBox1.Text);
                obj.Show();
            }
        }

     

    Form2

    Code Snippet

        public partial class Form2 : Form
        {
            string _Tea;
            public Form2(string Tea)
            {
                InitializeComponent();
                _Tea = Tea;
            }

            private void Form2_Load(object sender, EventArgs e)
            {
                FileStream fs = new FileStream(@"cc.csv", FileMode.Open);
                StreamReader sr = new StreamReader(fs, System.Text.Encoding.Default);
                string strCC = sr.ReadToEnd();
                fs.Close();
                string[] aryCC = strCC.Split("\r\n".ToCharArray());
                listBox1.Items.Clear();
                foreach (string cc in aryCC)
                {
                    string[] teacc = cc.Split(",".ToCharArray());
                    if (teacc[0] == _Tea)
                    {
                        for (int c = 1; c < teacc.Length; c++)
                        {
                            listBox1.Items.Add(teacc[c].ToString());
                        }
                        break;
                    }
                }
            }
        }

     

     

     

    2007年7月25日 上午 05:49
  • 大大我按了確定後,跳不到form2
    2007年7月25日 上午 07:12
  • 用debug mode去追蹤你的code,或許你就能找到答案.

     

    說不定你的confirm的那個button click事件沒有觸發.

    2007年7月25日 上午 07:28
  • 可以囉大大,請問大大如果form1的tea.csv一樣是紅茶,綠茶.如果form2的cc.csv有三個ListBox

    Ps:容量cc數的cc.csv檔資料如下

    第一行 紅茶.500cc,700cc,1000cc
    第二行 綠茶,250cc,500cc,900cc

    ListBox!裡面有500cc跟250cc

    如果我選擇500cc的話,,700cc會在ListBox2裡,1000cc會在ListBox3裡

    如果我選擇250cc的話,,500cc會在ListBox2裡,900cc會在ListBox3裡

    請問大大如何改寫呢?

    2007年7月26日 上午 07:02
  • 提示1 : 我第一個範例有用到SelectIndexChanged依目前選擇,把符合項目加到另一個ListBox內.

    提示2 : 你要做的功能,在這兩個範例內都有類似做法,"活用"一下就好.

     

    應該不用再把Code寫的那麼清楚給你才對.因為相關範例都有了.

     

    2007年7月26日 上午 09:21
  • 謝謝大大,那大大能幫看依下嗎

    請問大大,下面程式碼寫入時,當我讀取寫入第一筆資料,選擇250cc寫入後,希望能依序寫入在當筆資料後面 ,可是寫入後會遇到下面問題,能的話請用以下範例作回覆

    寫入前

    第一茶站,大杯,紅茶,^250cc^500cc^700cc^750cc^1000cc
    第一茶站,大杯,綠茶,^250cc^500cc^700cc^750cc^1000cc
    第一茶站,大杯,烏龍茶,^250cc^500cc^700cc^750cc^1000cc
    第一茶站,大杯,青茶,^250cc^500cc^700cc^750cc^1000cc
    第一茶站,大杯,奶茶,^250cc^500cc^700cc^750cc^1000cc

    (遇到的問題)

    寫入後

    第一茶站,大杯,紅茶,^250cc^500cc^700cc^750cc^1000cc
    ^250cc茶站,大杯,綠茶,^250cc^500cc^700cc^750cc^1000cc
    第一茶站,大杯,烏龍茶,^250cc^500cc^700cc^750cc^1000cc
    第一茶站,大杯,青茶,^250cc^500cc^700cc^750cc^1000cc
    第一茶站,大杯,奶茶,^250cc^500cc^700cc^750cc^1000cc

     

    希望寫入後如下

    第一茶站,大杯,紅茶^250cc^500cc^700cc^750cc^1000cc^250cc
    第一茶站,大杯,綠茶^250cc^500cc^700cc^750cc^1000cc^250cc

    第一茶站,大杯,烏龍茶^250cc^500cc^700cc^750cc^1000cc^250cc
    第一茶站,大杯,青茶^250cc^500cc^700cc^750cc^1000cc^250cc
    第一茶站,大杯,奶茶^250cc^500cc^700cc^750cc^1000cc^250cc

     

    程式碼如下:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.IO;


    namespace DeviceApplication3
    {
        public partial class Form2 : Form
        {
            string[] ary;
            string[] ary2;
            string content;
            int lngAbsPos = 0;
            int lngRcdCnt = 0;

            public Form2()
            {
                InitializeComponent();
            }

            private void Form2_Load(object sender, EventArgs e)
            {
                FileStream fs = new FileStream(@"\My Documents\form2.csv", FileMode.Open);
                StreamReader sr = new StreamReader(fs, System.Text.Encoding.UTF8);
                string[] ary = sr.ReadToEnd().Split("\n".ToCharArray());

     

                ary2 = ary.GetValue(lngAbsPos).ToString().Split(",".ToCharArray());
                textBox1.Text = ary2.GetValue(0).ToString(); ;
                fs.Close();

                ary2 = ary.GetValue(lngAbsPos).ToString().Split(",".ToCharArray());
                listBox1.Items.Add(ary2.GetValue(1).ToString());
                fs.Close();

                ary2 = ary.GetValue(lngAbsPos).ToString().Split(",".ToCharArray());
                listBox2.Items.Add(ary2.GetValue(2).ToString());
                fs.Close();

                ary2 = ary.GetValue(lngAbsPos).ToString().Split("^".ToCharArray());
                for (int i = 1; i < ary2.Length; i++)
                    listBox3.Items.Add(ary2.GetValue(i).ToString());
                fs.Close();
                content = ary.GetValue(lngAbsPos).ToString();
            }

            private void button1_Click(object sender, EventArgs e)
            {
                FileStream fw = new FileStream(@"\My Documents\form2.csv", FileMode.Open);
                StreamWriter sw = new StreamWriter(fw, System.Text.Encoding.UTF8);
                string str;
                str = content;
                str += "^" + (string)this.listBox3.SelectedItem;
                sw.Write(str);
                sw.Flush();
                fw.Close();
            }
        }
    }

    2007年7月28日 上午 08:51