none
兩個form丟資料的問題 RRS feed

  • 問題

  • 請問各位前輩

    小弟目前想做一個數值輸入的鍵盤

    Form1裡面有十個textbox,Form2則設計的像鍵盤一樣可以輸入數值

    按下form1的textbox後會彈出form2,在form2輸入完成後再將資料丟回

    目前小弟看網路上的資料後

    懂得用  form1.textbox1=form2.textbox1 這樣將資料互丟

    可是現在我的Form1裡面有10個textbox

    用共用事件的話雖然有辦法判斷是哪個textbox被按下

    但是還不懂得怎麼抓到他的資料

    而且也還沒有辦法從form2那邊丟回到被按下的textbox

    煩請前輩們指導,謝謝

    2014年1月9日 上午 01:27

解答

所有回覆

  • 您好,

    最簡單的方式是,您在彈出form2前,將form1的textbox設定給form1上的一個public 屬性,這樣form2就可以處理好之後,就直接將值assign給它!

    另外,有關Virtual keyboard資訊,給您參考看看,
    virtual keyboard code
    Create a soft keyboard (CSSoftKeyboard)



    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/



    • 已編輯 亂馬客 2014年1月9日 上午 02:34
    2014年1月9日 上午 01:49
  • Hi,

    共用事件要取得資料就是在那邊將sender轉成TextBox

    然後取該TextBox的Text屬性

    將Form2資料丟回這邊

    你可以將Form2輸入數值的事件開出

    當Form1的Textbox被按下要叫出Form2時將事件處理常式繫上該事件

    事件處理常式那邊將輸入的值填入Form1

    最後記得在離開Form2時要將事件繫結解開

    這邊可能要用Lambda去寫事件處理常式

    或是善用Form2.Tag

    不然可能不好Mapping到對應的Form1

    當然你也可以訂一組介面

    一個是訂閱者,一個是發佈者

    訂閱者是Form1

    發佈者是Form2

    在Form1叫起Form2時

    Form1對Form2作訂閱的動作

    Form2輸入數值時透過介面將資料送給訂閱者Form1


    謙卑學習,持之以恆,才能不斷的Level Up

    2014年1月9日 上午 02:47
  • 2014年1月9日 上午 03:04
  • 其實樓上幾層說的方法都做得到, 樓主標為解答後又取消的原因是為何 ? 如果有不解處, 可以繼續問.

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2014年1月9日 上午 05:17
    版主
  • 感謝前輩們的指導

    因小弟是寫PLC的,用的方法比較笨,

    小弟用PLC與PLC buffer mapping的概念

    在VB上面建一個module

    然後在裡面建public textbox

    包成Function後,透過它實現回丟

    2014年1月9日 上午 06:08
  • 以下是其中一種範例

    Public Class Form1
    	Sub New()
    
    		' 此為設計工具所需的呼叫。
    		InitializeComponent()
    
    		' 在 InitializeComponent() 呼叫之後加入任何初始設定。
    		AddHandler TextBox1.Click, AddressOf TextBox_Click
    		AddHandler TextBox2.Click, AddressOf TextBox_Click
    		AddHandler TextBox3.Click, AddressOf TextBox_Click
    	End Sub
    
    	Private Sub TextBox_Click(sender As Object, e As System.EventArgs)
    		Dim frm As Form2 = New Form2()
    		frm.PassValue = DirectCast(sender, TextBox)
    		frm.Show()
    	End Sub
    End Class
    

    Public Class Form2
    
    	Private _passvalue As TextBox
    	Public WriteOnly Property PassValue As TextBox
    		Set(value As TextBox)
    			_passvalue = value
    		End Set
    	End Property
    
    	Sub New()
    
    		' 此為設計工具所需的呼叫。
    		InitializeComponent()
    
    		' 在 InitializeComponent() 呼叫之後加入任何初始設定。
    		AddHandler Button1.Click, AddressOf Button_Click
    	End Sub
    
    
    	Private Sub Button_Click(sender As System.Object, e As System.EventArgs)
    		_passvalue.Text &= "1"
    	End Sub
    End Class

    有一個寫 Visual Basic 要注意的地方是, 少用 Form2.Show()  這種方式, 儘量另外宣告並產生執行個體來用 (到了使用多執行緒時,  Form2.Show() 這種寫法會帶來很多麻煩 )


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2014年1月9日 上午 06:32
    版主
  • 感謝Bill前輩,您寫的方式跟我思考的方向有點像,謝謝指教
    2014年1月9日 上午 06:56