Windows Forms: как изменить размеры формы и сетки вместе? - PullRequest
1 голос
/ 17 июля 2009

В C # у меня есть таблица, отображаемая с помощью DataGridView. Таблица значительно меньше формы, в которой она появляется, поэтому таблица заполняет только небольшую часть верхнего левого угла формы.

Мой вопрос: как можно (программно) сделать так: (1) таблица автоматически увеличивается, чтобы она заполнила форму, или (2) заставляет форму автоматически уменьшаться до размера таблицы? (И возможны ли оба?)

using System ;
using System.Windows.Forms ;
using System.Data ;

public class NiftyForm : System.Windows.Forms.Form
    {
    private     DataGridView        myDataGridView ;
    private     System.Data.DataTable   myDataTable ;

    public NiftyForm ( )
        {
        this.Load  +=  new EventHandler ( NiftyFormLoadEventHandler ) ;
        }

    private void NiftyFormLoadEventHandler ( System.Object sender,
                                             System.EventArgs ea )
        {
        this.Location  =  new System.Drawing.Point ( 40, 30 ) ;
        this.Size      =  new System.Drawing.Size ( 800, 600 ) ;

        myDataTable  =  new DataTable ( ) ;
        DataColumn  myDataColumn  =  new DataColumn ( ) ;
        myDataColumn.DataType           =   typeof(string) ;
        myDataColumn.ColumnName         =   "Name";
        myDataColumn.ReadOnly           =   true;
        myDataTable.Columns.Add ( myDataColumn ) ;

        myDataColumn    =  new DataColumn ( ) ;
        myDataColumn.DataType   =   typeof(int) ;
        myDataColumn.ColumnName =   "Age";
        myDataColumn.ReadOnly   =   true;
        myDataTable.Columns.Add ( myDataColumn ) ;

        string [ ]  Name  =  new string [ 5 ]
                             { "Dwight", "Abe", "Cal", "Bill", "Eisenhower" } ;
        int    [ ]  Age   =  new int    [ 5 ] { 123, 45, 6, 78, 9 } ;
        for ( int i = 0 ; i < 5 ; i ++ )
            {
            DataRow     myDataRow  =  myDataTable.NewRow ( ) ;
            myDataRow [ "Name" ]    =   Name [ i ] ;
            myDataRow [ "Age" ] =   Age  [ i ] ;
            myDataTable.Rows.Add ( myDataRow ) ;
            }

        this.myDataGridView             =   new DataGridView ( ) ;
        this.myDataGridView.DataSource      =   myDataTable ;
        this.myDataGridView.Dock        =   DockStyle.Fill ;
        this.Controls.Add ( this.myDataGridView ) ;
        }

    [ STAThreadAttribute ( ) ]

    static void Main ( )
        {
        Application.Run ( new NiftyForm ( ) ) ;
        }

    }

Ответы [ 4 ]

3 голосов
/ 17 июля 2009
this.myDataGridView.Dock = DockStyle.Fill;

Это позволит DataGrid заполнить всю форму

Вы также можете использовать Якорь, как это.

this.myDataGridView.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;

Это означает, что DataGrid изменится при изменении размера Form .

1 голос
/ 17 июля 2009

Играйте со свойствами Dock и Anchor в Grid :) Кроме того, вы можете попробовать использовать свойство AutoSize формы, чтобы увидеть, работает ли оно так, как вы хотите.

0 голосов
/ 17 июля 2009

Мне еще не приходилось сталкиваться с такой проблемой, которую не удалось решить с помощью свойства Anchor. Для меня Dock кажется гораздо сложнее в использовании. Я думаю, что если в форме нет других элементов управления, DockStyle.Fill в порядке. Большинство форм имеют другие элементы управления, поэтому привязка ко всем четырем сторонам намного проще.

0 голосов
/ 17 июля 2009

Установите форму AutoSize = True и AutoSizeMode = GrowAndShrink, и ваша форма будет соответствовать размеру сетки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...