- - PR -
行のクリア
1|2|3
次のページへ»
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2007-10-10 16:50
前回は お世話になりました。
VB2005にて、初めて入力処理のプログラムを作成しています。 明細部の入力にTableLayoutPanelを配置(6行X4列)し そのセルにPanelを配置(その上にTextBoxを配置)したり直接TextBox、ComboBoxを配置した レイアウトになっています。 そこでファンクションキーのF4を押した場合、上段の内容を押した行に複写、 またF6を押した場合、押した行の内容をクリア(TextBoxはTextプロパティ、ComboBoxはSelectedIndexを0にする) する機能を追加したいのです。 vSen = Microsoft.VisualBasic.Right(Trim(sender.Name), 1) '現在行 Select Case e.KeyCode Case Keys.F4 '*** 複写 *** Int16.TryParse(vSen, vSUJI) vSen2 = (vSUJI - 1).ToString '前行 vPnl2 = DirectCast(pnlLine.Controls("pnlSYCD" & vSen2), Panel) vPnl.Controls("SY11" & vSen).Text = vPnl2.Controls("SY11" & vSen2).Text vPnl.Controls("SY12" & vSen).Text = vPnl2.Controls("SY12" & vSen2).Text vPnl.Controls("SY2" & vSen).Text = vPnl2.Controls("SY2" & vSen2).Text vComboBox2 = DirectCast(pnlLine.Controls("pnlHINME" & vSen2).Controls ("HINME" & vSen2), ComboBox) vComboBox.SelectedIndex = vComboBox2.SelectedIndex pnlLine.Controls("SUR" & vSen).Text = pnlLine.Controls("SUR" & vSen2).Text pnlLine.Controls("TANK" & vSen).Text = pnlLine.Controls("TANK" & vSen2).Text Case Keys.F6 '*** クリア *** vPnl.Controls("SY11" & vSen).Text = "" vPnl.Controls("SY12" & vSen).Text = "" vPnl.Controls("SY2" & vSen).Text = "" vComboBox.SelectedIndex = 0 pnlLine.Controls("SUR" & vSen).Text = "" pnlLine.Controls("TANK" & vSen).Text = "" End Select と、コーディングしましたが、もっとシンプルなコーディング方法はないでしょうか? 例えばTableLayoutPanelの何かを使って・・ どなたか、ご教授頂けないないでしょうか。 宜しくお願いします。 |
|
投稿日時: 2007-10-10 21:10
何かといえば GetControlFromPosition など。
|
|
投稿日時: 2007-10-11 14:18
ありがとうございます。
試しに2行、3列のTableLayoutPanelに ボタン、テキストボックス2つを配置し ボタンをクリックしたらその行の内容を クリアするテストを行いたいのですが Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button0.Click, Button1.Click For Each c As Control In TableLayoutPanel.Controls Debug.Print(TableLayoutPanel.GetRow(c).ToString) Next End Sub 指定した行全てなので、メソッドをGetRowにしてみました。 ここから、どのように指定した行をクリアするのでしょうか? |
|
投稿日時: 2007-10-11 16:08
For Each にて何を取得したいのかがわかりませんが・・・。
TableLayoutPanel.GetRow([押されたボタン]) でボタンがどの行にあるのかを取得する。 TableLayoutPanel.GetControlFromPosition([column],[取得した行]) でColumn数の分だけループさせてTextBoxなら値をクリアする。 (ComboBoxなどが混ざる場合は場合分けすればよいと思われます) |
|
投稿日時: 2007-10-11 18:30
よっし〜さん、ありがとうございます。
クリアはよく解りました。 上段複写は、押された位置とその上段の位置が必要ですよね。 申し訳ありません、 上段複写となると、どのようにループさせると効率的でしょうか? |
|
投稿日時: 2007-10-12 13:04
[押された位置]-1 が上段の行になるのではないでしょうか。
最上段での制御は必要ですが。 TableLayoutPanel.GetControlFromPosition([column],[取得した行]) に TableLayoutPanel.GetControlFromPosition([column],[取得した行]-1) の値をセットするでよいと思います。 |
|
投稿日時: 2007-10-12 14:11
よっし〜さん、何度もありがとうございました。
|
|
投稿日時: 2007-10-12 15:50
先程はありがとうございました。
For i = 0 To pnlLine.ColumnCount - 1 pnlLine.GetControlFromPosition(i, 位置).Text = pnlLine.GetControlFromPosition(i, 位置-1).Text Next としましたが、もう1つ下位レベルのPanelに貼り付けてあるTextBoxのコピーができません、 このような場合、どのようにして子コントロールどうしを複写できますでしょうか? |
1|2|3
次のページへ»