none
我有兩個form,MainScreenc和NewForm如何讓MainScreenc取得NewForm裡的資料 RRS feed

  • 問題

  • 如題MainScreenc和NewForm 都在同一個namespace裡,在NewForm裡有15個textbox,我用一個陣列strdata去儲存這15個textbox.text,在MainScreen裡有

    一個textbox用來存放檔案路徑的文字,一個button按鈕當button按下時會開啟NewForm讓使用者輸入資料,使用者輸入完關閉NewForm後將陣列strdata的

    資料儲存到檔案裡。我有兩個問題
    1.在NewForm裡,我要將陣列strdata的資料寫進檔案裡;但是檔案路徑不想用手打,要如何才能取得MainScreenc裡的textbox.text。
    2.在MainScreen裡如何取得NewForm裡strdata的資料。
    3.goodsdata = newform.goodsdata();抓到的資料永遠都是空白(都是初始化的值),要如何才能抓到使用者輸入資料後的值。

    public partial class MainScreen : Form
    {
     NewForm newform = new NewForm();
     public MainScreen()
            {
                InitializeComponent();
     }
     private void button1_Click(object sender, EventArgs e)
            {
                NewForm newform = new NewForm();
                newform.Show();
                goodsdata = newform.goodsdata();
     }
    }


    public partial class NewForm : Form
    {
            StringBuilder[] strdata = new StringBuilder[15];
            StringBuilder[] data = new StringBuilder[15];

            public StringBuilder[] goodsdata()
            {
                return  data;
            }

            public NewForm()
            {
                InitializeComponent();           
            }
            private void button1_Click(object sender, EventArgs e)
            {
         //SBWidth定義每個StringBuilder的最大字元數
                data = FileApply.SBWidth(data, Int16.MaxValue);
                strdata = FileApply.SBWidth(strdata, Int16.MaxValue);
                data = strdata;


                MessageBox.Show("新增成功");
            }

            private void textBox1_TextChanged(object sender, EventArgs e)
            {
                strdata[0] = FileApply.STRtoStringBuilder(textBox1.Text , textBox1.Text.Length);
            }

    2019年10月13日 上午 07:54

解答

  • 1) 將textbox的Modifier屬性設定成:internal, MainForm就可以直接取用

    2) 在button1_click函式中建立並顯示NewForm, 然後就立即呼叫goodsdata函式取內容, 當然還來不及有內容, 所以就取到空白了

    • 已標示為解答 F-16V 2019年10月17日 上午 11:27
    2019年10月14日 上午 12:45

所有回覆

  • 1) 將textbox的Modifier屬性設定成:internal, MainForm就可以直接取用

    2) 在button1_click函式中建立並顯示NewForm, 然後就立即呼叫goodsdata函式取內容, 當然還來不及有內容, 所以就取到空白了

    • 已標示為解答 F-16V 2019年10月17日 上午 11:27
    2019年10月14日 上午 12:45
  • 感謝前輩提醒;我嘗試過但還是不行" 將textbox的Modifier屬性設定成:internal, MainForm就可以直接取用 "
    後來花了幾天時間思考最後成功解決我的問題;下面是我改寫後的程式

        public partial class MainScreen : Form
        {
            public static string path;
          //  public static StringBuilder[] goodsdata = new StringBuilder[15];

            public MainScreen()
            {
                InitializeComponent();

                path = textBox1.Text;
               
            }

            private void button1_Click(object sender, EventArgs e)
            {
                NewForm newform = new NewForm();
                newform.Show();
               
            }
        }

        public partial class NewForm : Form
        {
            StringBuilder[] strdata = new StringBuilder[15];

            public NewForm()
            {
                InitializeComponent();
                //SBWidth定義每個StringBuilder的最大字元數
                FileApply.SBWidth(strdata, Int16.MaxValue);
            }
           
            private void button1_Click(object sender, EventArgs e)
            {
               // MainScreen.goodsdata = strdata;
                if(FileApply.WriteFile_Add(MainScreen.path , FileApply.DataToCsv(strdata)) == true)
                {
                    MessageBox.Show("新增成功");
                }
                else
                {
                    MessageBox.Show("新增失敗");
                }
            }

            private void textBox1_TextChanged(object sender, EventArgs e)
            {
                strdata[0] = FileApply.STRtoStringBuilder(textBox1.Text , textBox1.Text.Length);
            }

    2019年10月17日 上午 11:26