Winforms DataGridViewresize问题

我不是100%肯定我应该如何说出这个问题,但我会尽我所能。

我有一个PointCtrlForm,在TableLayoutPanel中有一个DataGridView。 DataGridView作为Fill停靠在表中。 PointCtrlForm停靠在另一个设置为MDIParent的窗口,并将dockstyle属性设置为Fill。

正确调整主窗口的大小可以调整PointCtrlForm的大小,然后也可以调整DataGridView的大小。 好吧,至少“一半”的resize正常。 扩大主窗口也会扩大datagridview,这是我的预期,但如果我将主窗口缩小到某个点,DataGridView会停止收缩并隐藏列而不显示滚动条。

我已检查所有列都没有启用Frozen属性,检查datagridview和子窗口是否已正确停靠,并检查scrollbars属性是否设置为两者。

编辑:AutoSizeColumnsMode也填充。

我将在这里发布Designer.cs的内容。 我很感激任何指导。

namespace DDCUI { partial class PointCtrlForm { ///  /// Required designer variable. ///  private System.ComponentModel.IContainer components = null; ///  /// Clean up any resources being used. ///  /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code ///  /// Required method for Designer support - do not modify /// the contents of this method with the code editor. ///  private void InitializeComponent() { this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel(); this.CmbSubDevice = new System.Windows.Forms.ComboBox(); this.BtnBack = new System.Windows.Forms.Button(); this.CmbMainDevice = new System.Windows.Forms.ComboBox(); this.dataGridView1 = new System.Windows.Forms.DataGridView(); this.BtnRefresh = new System.Windows.Forms.Button(); this.label1 = new System.Windows.Forms.Label(); this.ID = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.PointName = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.Value = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.Description = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.DefaultValue = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.ActiveString = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.InactiveString = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.AlarmCondition = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.tableLayoutPanel1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit(); this.SuspendLayout(); // // tableLayoutPanel1 // this.tableLayoutPanel1.ColumnCount = 6; this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 100F)); this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 100F)); this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 100F)); this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 100F)); this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 151F)); this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 88F)); this.tableLayoutPanel1.Controls.Add(this.CmbSubDevice, 0, 1); this.tableLayoutPanel1.Controls.Add(this.BtnBack, 0, 0); this.tableLayoutPanel1.Controls.Add(this.CmbMainDevice, 0, 1); this.tableLayoutPanel1.Controls.Add(this.dataGridView1, 0, 2); this.tableLayoutPanel1.Controls.Add(this.BtnRefresh, 4, 1); this.tableLayoutPanel1.Controls.Add(this.label1, 5, 1); this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill; this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0); this.tableLayoutPanel1.Name = "tableLayoutPanel1"; this.tableLayoutPanel1.RowCount = 3; this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 67.02128F)); this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 32.97872F)); this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 368F)); this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); this.tableLayoutPanel1.Size = new System.Drawing.Size(639, 467); this.tableLayoutPanel1.TabIndex = 0; // // CmbSubDevice // this.tableLayoutPanel1.SetColumnSpan(this.CmbSubDevice, 2); this.CmbSubDevice.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.CmbSubDevice.Font = new System.Drawing.Font("굴림", 12F); this.CmbSubDevice.FormattingEnabled = true; this.CmbSubDevice.Location = new System.Drawing.Point(203, 69); this.CmbSubDevice.Name = "CmbSubDevice"; this.CmbSubDevice.Size = new System.Drawing.Size(194, 24); this.CmbSubDevice.TabIndex = 3; // // BtnBack // this.BtnBack.Location = new System.Drawing.Point(3, 3); this.BtnBack.Name = "BtnBack"; this.BtnBack.Size = new System.Drawing.Size(94, 54); this.BtnBack.TabIndex = 0; this.BtnBack.Text = "Back"; this.BtnBack.UseVisualStyleBackColor = true; this.BtnBack.Click += new System.EventHandler(this.BtnBack_Click); // // CmbMainDevice // this.tableLayoutPanel1.SetColumnSpan(this.CmbMainDevice, 2); this.CmbMainDevice.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this.CmbMainDevice.Font = new System.Drawing.Font("굴림", 12F); this.CmbMainDevice.FormattingEnabled = true; this.CmbMainDevice.Items.AddRange(new object[] { "I/O", "VIRTUAL", "SAC", "MODBUS", "NATIONAL", "TOSHIBA", "SCHEDULE", "SYSTEM ALARM", "LOGIC", "GROUP"}); this.CmbMainDevice.Location = new System.Drawing.Point(3, 69); this.CmbMainDevice.Name = "CmbMainDevice"; this.CmbMainDevice.Size = new System.Drawing.Size(194, 24); this.CmbMainDevice.TabIndex = 2; this.CmbMainDevice.SelectedIndexChanged += new System.EventHandler(this.CmbMainDevice_SelectedIndexChanged); // // dataGridView1 // this.dataGridView1.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { this.ID, this.PointName, this.Value, this.Description, this.DefaultValue, this.ActiveString, this.InactiveString, this.AlarmCondition}); this.tableLayoutPanel1.SetColumnSpan(this.dataGridView1, 6); this.dataGridView1.Dock = System.Windows.Forms.DockStyle.Fill; this.dataGridView1.Location = new System.Drawing.Point(3, 101); this.dataGridView1.Name = "dataGridView1"; this.dataGridView1.RowTemplate.Height = 23; this.dataGridView1.Size = new System.Drawing.Size(633, 363); this.dataGridView1.TabIndex = 5; // // BtnRefresh // this.BtnRefresh.Location = new System.Drawing.Point(403, 69); this.BtnRefresh.Name = "BtnRefresh"; this.BtnRefresh.Size = new System.Drawing.Size(94, 26); this.BtnRefresh.TabIndex = 6; this.BtnRefresh.Text = "Refresh"; this.BtnRefresh.UseVisualStyleBackColor = true; // // label1 // this.label1.AutoSize = true; this.label1.Dock = System.Windows.Forms.DockStyle.Fill; this.label1.Font = new System.Drawing.Font("굴림", 12F); this.label1.Location = new System.Drawing.Point(554, 66); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(82, 32); this.label1.TabIndex = 7; this.label1.Text = "XXX 개"; this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; // // ID // this.ID.FillWeight = 70F; this.ID.HeaderText = "ID"; this.ID.Name = "ID"; // // PointName // this.PointName.FillWeight = 70F; this.PointName.HeaderText = "이름"; this.PointName.Name = "PointName"; // // Value // this.Value.FillWeight = 70F; this.Value.HeaderText = "값"; this.Value.Name = "Value"; // // Description // this.Description.FillWeight = 70F; this.Description.HeaderText = "설명"; this.Description.Name = "Description"; // // DefaultValue // this.DefaultValue.FillWeight = 70F; this.DefaultValue.HeaderText = "초기값"; this.DefaultValue.Name = "DefaultValue"; // // ActiveString // this.ActiveString.HeaderText = "Active문자열"; this.ActiveString.Name = "ActiveString"; // // InactiveString // this.InactiveString.HeaderText = "InActive문자열"; this.InactiveString.Name = "InactiveString"; // // AlarmCondition // this.AlarmCondition.HeaderText = "알람조건"; this.AlarmCondition.Name = "AlarmCondition"; // // PointCtrlForm // this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(639, 467); this.Controls.Add(this.tableLayoutPanel1); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; this.Name = "PointCtrlForm"; this.Text = "LG-DDC"; this.tableLayoutPanel1.ResumeLayout(false); this.tableLayoutPanel1.PerformLayout(); ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit(); this.ResumeLayout(false); } #endregion private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1; private System.Windows.Forms.Button BtnBack; private System.Windows.Forms.ComboBox CmbMainDevice; private System.Windows.Forms.ComboBox CmbSubDevice; private System.Windows.Forms.DataGridView dataGridView1; private System.Windows.Forms.Button BtnRefresh; private System.Windows.Forms.Label label1; private System.Windows.Forms.DataGridViewTextBoxColumn ID; private System.Windows.Forms.DataGridViewTextBoxColumn PointName; private System.Windows.Forms.DataGridViewTextBoxColumn Value; private System.Windows.Forms.DataGridViewTextBoxColumn Description; private System.Windows.Forms.DataGridViewTextBoxColumn DefaultValue; private System.Windows.Forms.DataGridViewTextBoxColumn ActiveString; private System.Windows.Forms.DataGridViewTextBoxColumn InactiveString; private System.Windows.Forms.DataGridViewTextBoxColumn AlarmCondition; } } 

我找到了解决方案,而且相当简单。

DGV的行和列大小必须设置为“百分比(相对)”而不是“绝对”,以使对接正常工作。

您可以通过右键单击DGV的其中一个单元格并单击“编辑行/列属性”来编辑大小。