

vb.netでSplitContainerの右側のPanelにPictureBoxコントロール(赤色）を配置しています。このピクチャボックスだけをキーボード操作で移動したいのですが、キーボードボタンを押すたびにSplitContainerの境界線も移動してしまいます。  
境界線を動かさずにPictureBoxだけを動かすにはどのようにしたらよいでしょうか？

開発環境 Visual Studio community 2017  
.NetFramework 4.5.2

[![SplitContainerのPanel2にPictureBox（赤色）が配置してある](https://i.stack.imgur.com/DrOw6.png)](https://i.stack.imgur.com/DrOw6.png)

[![SplitContainerの境界線が移動してしまう](https://i.stack.imgur.com/2Ckbn.png)](https://i.stack.imgur.com/2Ckbn.png)

コード

[code]

    Public Class Form1
        Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles MyBase.KeyDown
            If e.KeyCode = Keys.Up Then
                Me.PictureBox1.Location = New Point(Me.PictureBox1.Location.X, Me.PictureBox1.Location.Y - 1)
            ElseIf e.KeyCode = Keys.Right Then
                Me.PictureBox1.Location = New Point(Me.PictureBox1.Location.X + 1, Me.PictureBox1.Location.Y)
            ElseIf e.KeyCode = Keys.Down Then
                Me.PictureBox1.Location = New Point(Me.PictureBox1.Location.X, Me.PictureBox1.Location.Y + 1)
            ElseIf e.KeyCode = Keys.Left Then
                Me.PictureBox1.Location = New Point(Me.PictureBox1.Location.X - 1, Me.PictureBox1.Location.Y)
            End If
        End Sub
    
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            'Me.SplitContainer1.FixedPanel = FixedPanel.Panel1  'コメントを解除してもSplitContainer1の境界線が動く
        End Sub
    End Class
    
[/code]

**\----追記----**  
kunif様の回答を参考にさせていただいて境界線を固定したままでPictureBoxだけを動かす事ができました。  
ポイントは  
１．SplitContainer1コントロールのIsSplitterFixedプロパティをTrueに設定する  
２．Form1_KeyDown関数に書いていたキーボードの処理コードをSplitContainer1_KeyDown関数に書く

[code]

    Public Class Form1
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Me.SplitContainer1.IsSplitterFixed = True
        End Sub
    
        Private Sub SplitContainer1_KeyDown(sender As Object, e As KeyEventArgs) Handles SplitContainer1.KeyDown
            If e.KeyCode = Keys.Up Then
                Me.PictureBox1.Location = New Point(Me.PictureBox1.Location.X, Me.PictureBox1.Location.Y - 1)
            ElseIf e.KeyCode = Keys.Right Then
                Me.PictureBox1.Location = New Point(Me.PictureBox1.Location.X + 1, Me.PictureBox1.Location.Y)
            ElseIf e.KeyCode = Keys.Down Then
                Me.PictureBox1.Location = New Point(Me.PictureBox1.Location.X, Me.PictureBox1.Location.Y + 1)
            ElseIf e.KeyCode = Keys.Left Then
                Me.PictureBox1.Location = New Point(Me.PictureBox1.Location.X - 1, Me.PictureBox1.Location.Y)
            End If
        End Sub
    End Class
    
[/code]

ありがとうございました。


CC BY-SA 4.0
2022-03-27T10:25:36.423
88045
2022-03-28T01:26:19.183
2022-03-27T18:50:32.087
51020
51020
question
vb.net
vb.netでSplitContainerのPanel内に配置したPictureBoxコントロールの位置をキーボード操作で移動したい


こちらの記事はC#ですが参考になるでしょう。  
[【C#】SplitContainerのPanel固定方法](https://imagingsolution.net/program/csharp/fix_splitcontainer_panel/)

> また、マウス操作でパネルのサイズが変更しないようにするには IsSplitterFixedプロパティをTrueに設定します。

上記記事のFixedPanelプロパティを設定する方法は効果がありませんでした。  
IsSplitterFixedプロパティをTrueに設定することだけで実現出来るでしょう。

* * *

**追記**

質問の最初の Form1 の KeyDown イベントで動作させるには、Form1 の KeyPreview プロパティ を True
にしておく必要がありました。

SplitContainer1 の KeyDown イベントとどちらにするかどうかはお好みで。

* * *

こちらは逆に4つに分割して動かしたいが出来なかった質問の記事です。  
この先何か参考になれば。  
[SplitContainer上のコントールの上下左右へのサイズ変更](https://ja.stackoverflow.com/q/56417/26370)


CC BY-SA 4.0
2022-03-27T13:57:37.200
88046
2022-03-28T01:26:19.183
2022-03-28T01:26:19.183
26370
26370
88045
answer