TableLayoutSettings.SetCellPosition メソッドとは? わかりやすく解説

Weblio 辞書 > コンピュータ > .NET Framework クラス ライブラリ リファレンス > TableLayoutSettings.SetCellPosition メソッドの意味・解説 

TableLayoutSettings.SetCellPosition メソッド

メモ : このメソッドは、.NET Framework version 2.0新しく追加されたものです。

セルの行と列を表す TableLayoutPanelCellPosition設定します

名前空間: System.Windows.Forms
アセンブリ: System.Windows.Forms (system.windows.forms.dll 内)
構文構文

Public Sub SetCellPosition ( _
    control As Object, _
    cellPosition As TableLayoutPanelCellPosition _
)
Dim instance As TableLayoutSettings
Dim control As Object
Dim cellPosition As TableLayoutPanelCellPosition

instance.SetCellPosition(control, cellPosition)
public void SetCellPosition (
    Object control,
    TableLayoutPanelCellPosition cellPosition
)
public:
void SetCellPosition (
    Object^ control, 
    TableLayoutPanelCellPosition cellPosition
)
public void SetCellPosition (
    Object control, 
    TableLayoutPanelCellPosition cellPosition
)
public function SetCellPosition (
    control : Object, 
    cellPosition : TableLayoutPanelCellPosition
)

パラメータ

control

セル含まれるコントロール

cellPosition

セル位置を表す TableLayoutPanelCellPosition。

例外例外
例外種類条件

ArgumentNullException

controlnull 参照 (Visual Basic では Nothing) です。

使用例使用例

TableLayoutSettings オブジェクト使用して、TableLayoutPanel コントロール内のセル位置設定する方法次の例に示します。完全なコードの一覧については、「方法 : カスタムの ToolStripRenderer を実装する」を参照してください

' The following class implements a sliding-tile puzzle.
' The GridStrip control is a custom ToolStrip that arranges
' its ToolStripButton controls in a grid layout. There is 
' one empty cell, into which the user can slide an adjacent
' tile with a drag-and-drop operation. Tiles that are eligible 
' for moving are highlighted.
Public Class GridStrip
    Inherits ToolStrip

   ' The button that is the drag source.
   Private dragButton As ToolStripButton =
 Nothing
   
   ' Settings for the ToolStrip control's TableLayoutPanel.
   ' This provides access to the cell position of each
   ' ToolStripButton.
   Private tableSettings As TableLayoutSettings
 = Nothing
   
   ' The empty cell. ToolStripButton controls that are
   ' adjacent to this button can be moved to this button's
   ' cell position.
   Private emptyCellButton As ToolStripButton
 = Nothing
   
   ' The dimensions of each tile. A tile is represented
   ' by a ToolStripButton controls.
   Private tileSize As New
 Size(128, 128)
   
   ' The number of rows in the GridStrip control.
   Private rows As Integer
 = 5
   
   ' The number of columns in the GridStrip control.
   Private columns As Integer
 = 5
   
   ' The one-time initialzation behavior is enforced
   ' with this field. For more information, see the 
   ' OnPaint method.
   Private firstTime As Boolean
 = False
   
   ' This is a required by the Windows Forms designer.
   Private components As System.ComponentModel.IContainer
   
   
   ' The default constructor.  
    Public Sub New()
        MyBase.New()

        Me.InitializeComponent()

        Me.InitializeTableLayoutSettings()
    End Sub
   
   ' This property exposes the empty cell to the 
   ' GridStripRenderer class.
   Friend ReadOnly Property
 EmptyCell() As ToolStripButton
      Get
         Return Me.emptyCellButton
      End Get
   End Property
   
   
   ' This utility method initializes the TableLayoutPanel 
   ' which contains the ToolStripButton controls.
    Private Sub InitializeTableLayoutSettings()

        ' Specify the numbers of rows and columns in the GridStrip control.
        Me.tableSettings = CType(MyBase.LayoutSettings,
 TableLayoutSettings)
        Me.tableSettings.ColumnCount = Me.rows
        Me.tableSettings.RowCount = Me.columns

        ' Create a dummy bitmap with the dimensions of each tile.
        ' The GridStrip control sizes itself based on these dimensions.
        Dim b As New Bitmap(tileSize.Width,
 tileSize.Height)

        ' Populate the GridStrip control with ToolStripButton controls.
        Dim i As Integer
        For i = 0 To (Me.tableSettings.ColumnCount)
 - 1
            Dim j As Integer
            For j = 0 To (Me.tableSettings.RowCount)
 - 1
                ' Create a new ToolStripButton control.
                Dim btn As New
 ToolStripButton()
                btn.DisplayStyle = ToolStripItemDisplayStyle.Image
                btn.Image = b
                btn.ImageAlign = ContentAlignment.MiddleCenter
                btn.ImageScaling = ToolStripItemImageScaling.None
                btn.Margin = System.Windows.Forms.Padding.Empty
                btn.Padding = System.Windows.Forms.Padding.Empty

                ' Add the new ToolStripButton control to the GridStrip.
                Me.Items.Add(btn)

                ' Set the cell position of the ToolStripButton control.
                Dim cellPos As New
 TableLayoutPanelCellPosition(i, j)
                Me.tableSettings.SetCellPosition(btn, cellPos)

                ' If this is the ToolStripButton control at cell (0
,0),
                ' assign it as the empty cell button.
                If i = 0 AndAlso j = 0 Then
                    btn.Text = "Empty Cell"
                    btn.Image = b
                    Me.emptyCellButton = btn
                End If
            Next j
        Next i
    End Sub
   
   
   ' This method defines the Paint event behavior.
   ' The GridStripRenderer requires that the GridStrip
   ' be fully layed out when it is renders, so this
   ' initialization code cannot be placed in the
   ' GridStrip constructor. By the time the Paint
   ' event is raised, the control layout has been 
   ' completed, so the GridStripRenderer can paint
   ' correctly. This one-time initialization is
   ' implemented with the firstTime field.
   Protected Overrides Sub
 OnPaint(e As PaintEventArgs)
      MyBase.OnPaint(e)
      
      If Not Me.firstTime
 Then
         Me.Renderer = New GridStripRenderer()
         
         ' Comment this line to see the unscrambled image.
         Me.ScrambleButtons()
         Me.firstTime = True
      End If
    End Sub
   
   
   ' This utility method changes the ToolStripButton control 
   ' positions in the TableLayoutPanel. This scrambles the 
   ' buttons to initialize the puzzle.
   Private Sub ScrambleButtons()
      Dim i As Integer =
 0
      Dim lastElement As Integer
 = Me.Items.Count - 1
      
      While i <> lastElement AndAlso
 lastElement - i > 1
            Dim pos1 As TableLayoutPanelCellPosition
 = _
            Me.tableSettings.GetCellPosition(Me.Items(i))
         
            Dim pos2 As TableLayoutPanelCellPosition
 = _
            Me.tableSettings.GetCellPosition(Me.Items(lastElement))
         
            Me.tableSettings.SetCellPosition(Me.Items(i),
 pos2)
            i += 1
         
            Me.tableSettings.SetCellPosition(Me.Items(lastElement),
 pos1)
            lastElement -= 1
      End While
    End Sub
   
   
   ' This method defines the MouseDown event behavior. 
   ' If the user has clicked on a valid drag source, 
   ' the drag operation starts.
   Protected Overrides Sub
 OnMouseDown(mea As MouseEventArgs)
      MyBase.OnMouseDown(mea)
      
        Dim btn As ToolStripButton = CType(Me.GetItemAt(mea.Location),
 ToolStripButton)
      
      If Not (btn Is Nothing)
 Then
         If Me.IsValidDragSource(btn) Then
            Me.dragButton = btn
         End If
      End If
    End Sub
   
   
   ' This method defines the MouseMove event behavior. 
   Protected Overrides Sub
 OnMouseMove(mea As MouseEventArgs)
      MyBase.OnMouseMove(mea)
      
      ' Is a drag operation pending?
      If Not (Me.dragButton
 Is Nothing) Then
         ' A drag operation is pending. Call DoDragDrop to 
         ' determine the disposition of the operation.
         Dim dropEffect As DragDropEffects
 = Me.DoDragDrop(New DataObject(Me.dragButton),
 DragDropEffects.Move)
      End If
    End Sub
   
   ' This method defines the DragOver event behavior. 
   Protected Overrides Sub
 OnDragOver(dea As DragEventArgs)
      MyBase.OnDragOver(dea)
      
      ' Get the ToolStripButton control 
      ' at the given mouse position.
      Dim p As New Point(dea.X,
 dea.Y)
      Dim item As ToolStripButton = CType(Me.GetItemAt(Me.PointToClient(p)),
 ToolStripButton)
      
      
      ' If the ToolStripButton control is the empty cell,
      ' indicate that the move operation is valid.
        If item Is Me.emptyCellButton
 Then
            ' Set the drag operation to indicate a valid move.
            dea.Effect = DragDropEffects.Move
        End If
    End Sub
   
   
   ' This method defines the DragDrop event behavior. 
   Protected Overrides Sub
 OnDragDrop(dea As DragEventArgs)
      MyBase.OnDragDrop(dea)
      
      ' Did a valid move operation occur?
      If dea.Effect = DragDropEffects.Move Then
         ' The move operation is valid. Adjust the state
         ' of the GridStrip control's TableLayoutPanel,
         ' by swapping the positions of the source button
         ' and the empty cell button.
         ' Get the cell of the control to move.
         Dim sourcePos As TableLayoutPanelCellPosition
 = tableSettings.GetCellPosition(Me.dragButton)
         
         ' Get the cell of the emptyCellButton.
         Dim dropPos As TableLayoutPanelCellPosition
 = tableSettings.GetCellPosition(Me.emptyCellButton)
         
         ' Move the control to the empty cell.
         tableSettings.SetCellPosition(Me.dragButton, dropPos)
         
         ' Set the position of the empty cell to 
         ' that of the previously occupied cell.
         tableSettings.SetCellPosition(Me.emptyCellButton, sourcePos)
         
         ' Reset the drag operation.
         Me.dragButton = Nothing
      End If
    End Sub
   
   
   ' This method defines the DragLeave event behavior. 
   ' If the mouse leaves the client area of the GridStrip
   ' control, the drag operation is canceled.
   Protected Overrides Sub
 OnDragLeave(e As EventArgs)
      MyBase.OnDragLeave(e)
      
      ' Reset the drag operation.
      Me.dragButton = Nothing
    End Sub
   
   
   ' This method defines the ueryContinueDrag event behavior. 
   ' If the mouse leaves the client area of the GridStrip
   ' control, the drag operation is canceled.
   Protected Overrides Sub
 OnQueryContinueDrag(qcdevent As QueryContinueDragEventArgs)
      MyBase.OnQueryContinueDrag(qcdevent)
      
      ' Get the current mouse position, in screen coordinates.
      Dim mousePos As Point = Me.PointToClient(Control.MousePosition)
      
      ' If the mouse position is outside the GridStrip control's
      ' client area, cancel the drag operation. Be sure to
      ' transform the mouse's screen coordinates to client coordinates.
 
      If Not Me.ClientRectangle.Contains(mousePos)
 Then
         qcdevent.Action = DragAction.Cancel
      End If
    End Sub
   
   
   ' This utility method determines if a button
   ' is positioned relative to the empty cell 
   ' such that it can be dragged into the empty cell.
   Overloads Private Function
 IsValidDragSource(b As ToolStripButton) As
 Boolean
      Dim sourcePos As TableLayoutPanelCellPosition
 = tableSettings.GetCellPosition(b)
      
      Dim emptyPos As TableLayoutPanelCellPosition
 = tableSettings.GetCellPosition(Me.emptyCellButton)
      
        Return IsValidDragSource(sourcePos, emptyPos)

    End Function
   
   
   ' This utility method determines if a cell position
   ' is adjacent to the empty cell.
    Friend Overloads Shared
 Function IsValidDragSource( _
    ByVal sourcePos As TableLayoutPanelCellPosition,
 _
    ByVal emptyPos As TableLayoutPanelCellPosition)
 As Boolean
        Dim returnValue As Boolean
 = False

        ' A cell is considered to be a valid drag source if it
        ' is adjacent to the empty cell. Cells that are positioned
        ' on a diagonal are not valid.
        If sourcePos.Column = emptyPos.Column - 1 AndAlso
 sourcePos.Row = emptyPos.Row OrElse _
        (sourcePos.Column = emptyPos.Column + 1 AndAlso sourcePos.Row
 = emptyPos.Row) OrElse _
        (sourcePos.Column = emptyPos.Column AndAlso sourcePos.Row
 = emptyPos.Row - 1) OrElse _
        (sourcePos.Column = emptyPos.Column AndAlso sourcePos.Row
 = emptyPos.Row + 1) Then
            returnValue = True
        End If

        Return returnValue
    End Function
// The following class implements a sliding-tile puzzle.
// The GridStrip control is a custom ToolStrip that arranges
// its ToolStripButton controls in a grid layout. There is 
// one empty cell, into which the user can slide an adjacent
// tile with a drag-and-drop operation. Tiles that are eligible 
// for moving are highlighted.
public class GridStrip : ToolStrip
{
    // The button that is the drag source.
    private ToolStripButton dragButton = null;

    // Settings for the ToolStrip control's TableLayoutPanel.
    // This provides access to the cell position of each
    // ToolStripButton.
    private TableLayoutSettings tableSettings = null;

    // The empty cell. ToolStripButton controls that are
    // adjacent to this button can be moved to this button's
    // cell position.
    private ToolStripButton emptyCellButton = null;

    // The dimensions of each tile. A tile is represented
    // by a ToolStripButton controls.
    private Size tileSize = new Size(128, 128);

    // The number of rows in the GridStrip control.
    private readonly int rows = 5;

    // The number of columns in the GridStrip control.
    private readonly int columns = 5;

    // The one-time initialzation behavior is enforced
    // with this field. For more information, see the 
    // OnPaint method.
    private bool firstTime = false;

    // This is a required by the Windows Forms designer.
    private System.ComponentModel.IContainer components;
 
    // The default constructor.  
    public GridStrip()
    {
        this.InitializeComponent();

        this.InitializeTableLayoutSettings();
    }

    // This property exposes the empty cell to the 
    // GridStripRenderer class.
    internal ToolStripButton EmptyCell
    {
        get
        {
            return this.emptyCellButton;
        }
    }

    // This utility method initializes the TableLayoutPanel 
    // which contains the ToolStripButton controls.
    private void InitializeTableLayoutSettings()
    {
        // Specify the numbers of rows and columns in the GridStrip
 control.
        this.tableSettings = base.LayoutSettings
 as TableLayoutSettings;
        this.tableSettings.ColumnCount = this.rows;
        this.tableSettings.RowCount = this.columns;

        // Create a dummy bitmap with the dimensions of each tile.
        // The GridStrip control sizes itself based on these dimensions.
        Bitmap b = new Bitmap(tileSize.Width, tileSize.Height);

        // Populate the GridStrip control with ToolStripButton controls.
        for (int i = 0; i < this.tableSettings.ColumnCount;
 i++)
        {
            for (int j = 0; j < this.tableSettings.RowCount;
 j++)
            {
                // Create a new ToolStripButton control.
                ToolStripButton btn = new ToolStripButton();
                btn.DisplayStyle = ToolStripItemDisplayStyle.Image;
                btn.Image = b;
                btn.ImageAlign = ContentAlignment.MiddleCenter;
                btn.ImageScaling = ToolStripItemImageScaling.None;
                btn.Margin = Padding.Empty;
                btn.Padding = Padding.Empty;

                // Add the new ToolStripButton control to the GridStrip.
                this.Items.Add(btn);

                // Set the cell position of the ToolStripButton control.
                TableLayoutPanelCellPosition cellPos = new TableLayoutPanelCellPosition(i,
 j);
                this.tableSettings.SetCellPosition(btn, cellPos);

                // If this is the ToolStripButton control at cell (0
,0),
                // assign it as the empty cell button.
                if( i == 0 && j == 0 )
                {
                    btn.Text = "Empty Cell";
                    btn.Image = b;
                    this.emptyCellButton = btn;
                }
            }
        }
    }

    // This method defines the Paint event behavior.
    // The GridStripRenderer requires that the GridStrip
    // be fully layed out when it is renders, so this
    // initialization code cannot be placed in the
    // GridStrip constructor. By the time the Paint
    // event is raised, the control layout has been 
    // completed, so the GridStripRenderer can paint
    // correctly. This one-time initialization is
    // implemented with the firstTime field.
    protected override void OnPaint(PaintEventArgs
 e)
    {
        base.OnPaint(e);

        if (!this.firstTime)
        {
            this.Renderer = new GridStripRenderer();

            // Comment this line to see the unscrambled image.
            this.ScrambleButtons();
            this.firstTime = true;
        }
    }

    // This utility method changes the ToolStripButton control 
    // positions in the TableLayoutPanel. This scrambles the 
    // buttons to initialize the puzzle.
    private void ScrambleButtons()
    {
        int i = 0;
        int lastElement = this.Items.Count
 - 1;

        while ( (i != lastElement ) &&
                (lastElement - i > 1) )
        {
            TableLayoutPanelCellPosition pos1 = 
                this.tableSettings.GetCellPosition(this.Items[i]);

            TableLayoutPanelCellPosition pos2 = 
                this.tableSettings.GetCellPosition(this.Items[lastElement]);

            this.tableSettings.SetCellPosition(
                this.Items[i++], 
                pos2);

            this.tableSettings.SetCellPosition(
                this.Items[lastElement--], 
                pos1);
        }
    }

    // This method defines the MouseDown event behavior. 
    // If the user has clicked on a valid drag source, 
    // the drag operation starts.
    protected override void OnMouseDown(MouseEventArgs
 mea)
    {
        base.OnMouseDown(mea);

        ToolStripButton btn = this.GetItemAt(mea.Location) as
 ToolStripButton;

        if (btn != null)
        {
            if (this.IsValidDragSource(btn))
            {
                this.dragButton = btn;
            }
        }
    }

    // This method defines the MouseMove event behavior. 
    protected override void OnMouseMove(MouseEventArgs
 mea)
    {
        base.OnMouseMove(mea);

        // Is a drag operation pending?
        if (this.dragButton != null)
        {
            // A drag operation is pending. Call DoDragDrop to 
            // determine the disposition of the operation.
            DragDropEffects dropEffect = this.DoDragDrop(
                new DataObject(this.dragButton),
 
                DragDropEffects.Move);
        }
    }

    // This method defines the DragOver event behavior. 
    protected override void OnDragOver(DragEventArgs
 dea)
    {
        base.OnDragOver(dea);

        // Get the ToolStripButton control 
        // at the given mouse position.
        Point p = new Point(dea.X, dea.Y);
        ToolStripButton item = this.GetItemAt(
            this.PointToClient(p)) as ToolStripButton;

        // If the ToolStripButton control is the empty cell,
        // indicate that the move operation is valid.
        if( item == this.emptyCellButton )
        {
            // Set the drag operation to indicate a valid move.
            dea.Effect = DragDropEffects.Move;
        }
    }

    // This method defines the DragDrop event behavior. 
    protected override void OnDragDrop(DragEventArgs
 dea)
    {
        base.OnDragDrop(dea);

        // Did a valid move operation occur?
        if (dea.Effect == DragDropEffects.Move)
        {
            // The move operation is valid. Adjust the state
            // of the GridStrip control's TableLayoutPanel,
            // by swapping the positions of the source button
            // and the empty cell button.

            // Get the cell of the control to move.
            TableLayoutPanelCellPosition sourcePos = 
                tableSettings.GetCellPosition(this.dragButton);

            // Get the cell of the emptyCellButton.
            TableLayoutPanelCellPosition dropPos = 
                tableSettings.GetCellPosition(this.emptyCellButton);

            // Move the control to the empty cell.
            tableSettings.SetCellPosition(this.dragButton, dropPos);

            // Set the position of the empty cell to 
            // that of the previously occupied cell.
            tableSettings.SetCellPosition(this.emptyCellButton,
 sourcePos);

            // Reset the drag operation.
            this.dragButton = null;
        }
    }

    // This method defines the DragLeave event behavior. 
    // If the mouse leaves the client area of the GridStrip
    // control, the drag operation is canceled.
    protected override void OnDragLeave(EventArgs
 e)
    {
        base.OnDragLeave(e);

        // Reset the drag operation.
        this.dragButton = null;
    }

    // This method defines the ueryContinueDrag event behavior. 
    // If the mouse leaves the client area of the GridStrip
    // control, the drag operation is canceled.
    protected override void OnQueryContinueDrag(QueryContinueDragEventArgs
 qcdevent)
    {
        base.OnQueryContinueDrag(qcdevent);

        // Get the current mouse position, in screen coordinates.
        Point mousePos = this.PointToClient(Control.MousePosition);

        // If the mouse position is outside the GridStrip control's
        // client area, cancel the drag operation. Be sure to
        // transform the mouse's screen coordinates to client coordinates.
 
        if (!this.ClientRectangle.Contains(mousePos))
        {
            qcdevent.Action = DragAction.Cancel;
        }
    }

    // This utility method determines if a button
    // is positioned relative to the empty cell 
    // such that it can be dragged into the empty cell.
    private bool IsValidDragSource(ToolStripButton
 b)
    {
        TableLayoutPanelCellPosition sourcePos = 
            tableSettings.GetCellPosition(b);

        TableLayoutPanelCellPosition emptyPos = 
            tableSettings.GetCellPosition(this.emptyCellButton);

        return (IsValidDragSource(sourcePos, emptyPos));
    }

    // This utility method determines if a cell position
    // is adjacent to the empty cell.
    internal static bool IsValidDragSource(
        TableLayoutPanelCellPosition sourcePos, 
        TableLayoutPanelCellPosition emptyPos)
    {
        bool returnValue = false;

        // A cell is considered to be a valid drag source if it
        // is adjacent to the empty cell. Cells that are positioned
        // on a diagonal are not valid.
        if (((sourcePos.Column == emptyPos.Column - 1) &&
 (sourcePos.Row == emptyPos.Row)) ||
            ((sourcePos.Column == emptyPos.Column + 1) && (sourcePos.Row
 == emptyPos.Row)) ||
            ((sourcePos.Column == emptyPos.Column) && (sourcePos.Row == emptyPos.Row
 - 1)) ||
            ((sourcePos.Column == emptyPos.Column) && (sourcePos.Row == emptyPos.Row
 + 1)))
        {
            returnValue = true;
        }

        return returnValue;
    }
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照
関連項目
TableLayoutSettings クラス
TableLayoutSettings メンバ
System.Windows.Forms 名前空間
TableLayoutPanel クラス



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

TableLayoutSettings.SetCellPosition メソッドのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



TableLayoutSettings.SetCellPosition メソッドのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2024 Microsoft.All rights reserved.

©2024 GRAS Group, Inc.RSS