2012-07-17 179 views
4

我写简单的代码:滚动条可见

namespace Test01 
{ 
    partial class Form1 
    { 
     /// <summary> 
     /// Required designer variable. 
     /// </summary> 
     private System.ComponentModel.IContainer components = null; 

     /// <summary> 
     /// Clean up any resources being used. 
     /// </summary> 
     /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> 
     protected override void Dispose(bool disposing) 
     { 
      if (disposing && (components != null)) 
      { 
       components.Dispose(); 
      } 
      base.Dispose(disposing); 
     } 

     #region Windows Form Designer generated code 

     /// <summary> 
     /// Required method for Designer support - do not modify 
     /// the contents of this method with the code editor. 
     /// </summary> 
     private void InitializeComponent() 
     { 
      this.panel1 = new System.Windows.Forms.Panel(); 
      this.button1 = new System.Windows.Forms.Button(); 
      this.button2 = new System.Windows.Forms.Button(); 
      this.button3 = new System.Windows.Forms.Button(); 
      this.button4 = new System.Windows.Forms.Button(); 
      this.panel1.SuspendLayout(); 
      this.SuspendLayout(); 
      // 
      // panel1 
      // 
      this.panel1.AutoScroll = true; 
      this.panel1.Controls.Add(this.button4); 
      this.panel1.Controls.Add(this.button3); 
      this.panel1.Controls.Add(this.button2); 
      this.panel1.Location = new System.Drawing.Point(24, 13); 
      this.panel1.Name = "panel1"; 
      this.panel1.Size = new System.Drawing.Size(206, 43); 
      this.panel1.TabIndex = 0; 
      // 
      // button1 
      // 
      this.button1.Location = new System.Drawing.Point(89, 62); 
      this.button1.Name = "button1"; 
      this.button1.Size = new System.Drawing.Size(75, 23); 
      this.button1.TabIndex = 1; 
      this.button1.Text = "button1"; 
      this.button1.UseVisualStyleBackColor = true; 
      this.button1.Click += new System.EventHandler(this.button1_Click); 
      // 
      // button2 
      // 
      this.button2.Location = new System.Drawing.Point(3, 3); 
      this.button2.Name = "button2"; 
      this.button2.Size = new System.Drawing.Size(75, 23); 
      this.button2.TabIndex = 2; 
      this.button2.Text = "button2"; 
      this.button2.UseVisualStyleBackColor = true; 
      // 
      // button3 
      // 
      this.button3.Location = new System.Drawing.Point(84, 3); 
      this.button3.Name = "button3"; 
      this.button3.Size = new System.Drawing.Size(75, 23); 
      this.button3.TabIndex = 3; 
      this.button3.Text = "button3"; 
      this.button3.UseVisualStyleBackColor = true; 
      // 
      // button4 
      // 
      this.button4.Location = new System.Drawing.Point(165, 3); 
      this.button4.Name = "button4"; 
      this.button4.Size = new System.Drawing.Size(75, 23); 
      this.button4.TabIndex = 4; 
      this.button4.Text = "button4"; 
      this.button4.UseVisualStyleBackColor = true; 
      // 
      // Form1 
      // 
      this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 
      this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 
      this.ClientSize = new System.Drawing.Size(251, 98); 
      this.Controls.Add(this.button1); 
      this.Controls.Add(this.panel1); 
      this.Name = "Form1"; 
      this.Text = "Form1"; 
      this.panel1.ResumeLayout(false); 
      this.ResumeLayout(false); 

     } 

     #endregion 

     private System.Windows.Forms.Panel panel1; 
     private System.Windows.Forms.Button button4; 
     private System.Windows.Forms.Button button3; 
     private System.Windows.Forms.Button button2; 
     private System.Windows.Forms.Button button1; 
    } 
} 

和:

namespace Test01 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      panel1.Controls.Remove(button4); 
     } 
    } 
} 

我运行它,并有如下结果:

Sample

在第一列我只是按下按钮1 - 它按预期工作。

在第二列我移动滚动条并按下button1 - button4消失,但滚动条仍然存在。当我折叠和展开窗口滚动条消失。

在第三栏,我打开经典主题,只需按下按钮1 - 一切OK。

我已阅读stackoverflow1stackoverflow2stackoverflow3并尝试使用验证,无效,更新,刷新 - 但它没有帮助。那么,我该如何解决这个问题?

回答

3

删除按钮之前重置滚动条的位置设置为0:

private void button1_Click(object sender, EventArgs e) 
    { 
     panel1.HorizontalScroll.Value = 0; 
     panel1.Controls.Remove(button4); 
    } 

编辑

因为我已经在滚动条的值为零,发现这个方法并不总是有效。我已经试过各种方法,迫使它经常清除滚动条,但似乎能可靠地工作的唯一的事情是消除按钮之前其值设置为1,则0:

 panel1.HorizontalScroll.Value = 1; 
     panel1.HorizontalScroll.Value = 0; 
     panel1.Controls.Remove(button4); 

这是丑陋的,但它似乎工作。我个人认为这是一个框架中的错误。

+0

谢谢!这个解决方案有效 – hired777 2012-07-18 11:00:58

0

尝试通过BeginInvoke的调用刷新方法,使得它重新进入窗口循环:

this.BeginInvoke((Action)scrollBar.PerformLayout); 

从当前方法(不调用)调用它有时避免重新呈现。

+0

它没有工作。 – hired777 2012-07-18 11:00:07

1

尝试用FlowLayoutPanel替代您的面板。使用与您要更换的面板相同的尺寸。在FlowLayoutPanel控件上,设置AutoScroll = TrueFlowDirection = TopDown

面板应该为您移动控件,而且您也不必担心滚动条。

+0

出于好奇,我只是试了一下,发现它面临与面板完全相同的问题。看起来这种行为是影响所有可滚动控件的“AutoScroll”属性中的一个错误。 – Antagony 2012-07-18 09:54:18