本帖最后由 wumin940590725 于 2013-04-09 08:50:53 编辑

解决方案 »

  1.   

    sizeChange事件中Font font = new Font("宋体",ctrl.Height -6); //具体效果自己调整下
      

  2.   

    字体这个不好自动变化吧,
    不过自己也可以在窗体中的 Resize 事件中去写代码,
    一旦检测到窗体的大小有变化,窗体字体的大小就作相应的变化
      

  3.   

    这个事件是font的事件

      

  4.   

    字体的自动改变我要写在resize中,只是应该怎么写我有这个事件。。panel.resize()
    不写这个的话控件是不会随着像素变化而变化的。现在只是控件变了而字体没有随着控件变化
      

  5.   


    我现在进行调试是使用下面控件占窗口比例来算的
     factor[i++] = (ctr.Location.X) / (float)Size.Width;
    结果字不够大。我把字放大了两倍结果效果看上去不错,这样的话现在我想问下font.size这个属性的大小到底是怎么算的啊
      

  6.   

    挨个控件设置,比如Button的Font大小按Button高度的80%来算,自定义控件按自定义控件的高度计算,具体怎么美观的话,参数多试试就行了
      

  7.   

    我有用foreach,现在我奇怪的是font.size这个属性不是显示字的大小的嘛,这个大小是怎么算的?就是它是按什么绘制的。好像那个font.sizepoints是按像素点来改变大小。我用的是control的width和height来计算比例的。所以这个是不是用x,y来定位的,我是这个问题
      

  8.   


    这个是基本的图像的样子。我需要知道这个字体是怎么算的才能知道重新求,就好像control中的location那个是定位一样,字体估计也有定位的。。font定位之后的size也没有height和width这样的东西。所以没法像control中的控件的size来改变。
      

  9.   

    人笨,看的头痛没看懂
    备注
    首选使用 Layout 事件处理自定义布局。响应 Resize 事件时会引发 Layout 事件,但在其他可能需要应用布局的情况下也会引发此事件。如果通过编程修改或用户交互更改 Size 属性,则将引发此事件。有关处理事件的更多信息,请参见使用事件。示例
    下面的代码示例演示 SizeChanged 事件。该示例中提供了 Button 控件的一个实例,此实例既可以水平缩放,也可以垂直缩放。 NumericUpDown 实例提供了水平比例因子和垂直比例值。名为“OK”的 Button 实例用于设置 Button 控件实例的比例值。只要控件大小更改,就会调用与控件的 SizeChanged 事件关联的事件处理程序。该事件处理程序显示一个消息框,指示控件的大小已更改。
      

  10.   

    这个我想问的是它是按什么机制来确定form上的位置的?
    例如这个“好”字。在电脑上面是怎么写出来的
    像是控件就是先用location确定起始坐标点然后用height和width来确定控件的大小的
    求高手讲解。
      

  11.   

    看来你连门槛都没看到了,送佛送到西吧。    public partial class Form7 : Form
        {
            public Form7()
            {
                InitializeComponent();
            }        private void button1_SizeChanged(object sender, EventArgs e)
            {
                Font font = new Font(button1.Font.FontFamily,button1.Height * 0.5f);
                button1.Font = font;
            }
        }
    partial class Form7
        {
            /// <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.button1 = new System.Windows.Forms.Button();
                this.SuspendLayout();
                // 
                // button1
                // 
                this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
                | System.Windows.Forms.AnchorStyles.Left) 
                | System.Windows.Forms.AnchorStyles.Right)));
                this.button1.Location = new System.Drawing.Point(61, 61);
                this.button1.Name = "button1";
                this.button1.Size = new System.Drawing.Size(192, 48);
                this.button1.TabIndex = 0;
                this.button1.Text = "按钮";
                this.button1.UseVisualStyleBackColor = true;
                this.button1.SizeChanged += new System.EventHandler(this.button1_SizeChanged);
                // 
                // Form7
                // 
                this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
                this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
                this.ClientSize = new System.Drawing.Size(284, 186);
                this.Controls.Add(this.button1);
                this.Name = "Form7";
                this.Text = "Form7";
                this.ResumeLayout(false);        }        #endregion        private System.Windows.Forms.Button button1;
      

  12.   

    Font font = new Font(button1.Font.FontFamily,button1.Height * 0.5f); 
    你的这个第二个参数为什么是0.5f。我知道这个构造我也能写出你的代码,我的意思是自动调节font的大小。
    你如果是写控件的自动调节不是用location得到控件的起始点。然后用height和width来确定大小吗
    font这个是怎么来确定大小的我又不是要一个固定的大小。固定大小我直接用控件里的font属性改不更好
      

  13.   


    但是你做的Font font = new Font(button1.Font.FontFamily,button1.Height * 0.5f);中的
    button1.Height*0.5f是什么意思??
    这个我要改变图形的大小,在panel中写的话和你是不一样的。所以我想知道你这个0.5f是什么意思
    ctrl.Font=new Font(this.Font.Name,(ctrl.Height*scale[i++]));我是直接成比例系数,但是这个比例系数我找了半天没找到怎么算,都不太好
      

  14.   

    所以你给的这个放大我知道,只不过比例怎么算我不清楚。因为font这个size或者height到底是什么意思我没搞懂。所以放大的比例我看着就觉得难受
      

  15.   

    乘以0.5神马意思不知道?就是按控件高度乘以0.5啊。Font字体的高度是按磅来的,磅和像素之间的转换自己google下。
    在分辨率为96PX/英寸的显示器下,高度乘以0.5约是,字体高度占空间高度的65%
      

  16.   

    看情况了,如果横向文字过多,是要考虑的。可以用Graphics的MeasureString,计算出文本的宽度。然后用递归,逐步缩小字体,直到能完全显示。
      

  17.   

    按你这么说,我就要不用滚动条,要不用autosize了。
      

  18.   

    c#自己有font函数,只不过只有一个heigt,说是行距,这个让我觉得很纠结不知道该和控件的高比呢还是宽比呢,因为宽和高相比你的比例是不确定的,所有要比最低的。我想要是能同时比就好了。
      

  19.   

    sizechange这个事件是form的,font的变化是由font的height来控制的,但是一般像是控件的话是由width和height来确定二维的。那个font只有一个height是由什么确定的呢?一维??
      

  20.   

    何为Font,字体。
    比如同样的字体绘制“as”和“asdfghjkl”你说宽度能一样么,所以指定字体的宽度没有任何意义。
    你选择了一种字体后,按指定字号绘制的文本的宽度就定死了,可以扩展一个方法private SizeF GetTextBounds(Font font,string txt)

       Bitmap bmp = new Bitmap(1,1);
       using(Graphics g = Graphics.FromImage(bmp))
       {
          SizeF size = g.MeasureString(font,txt);
          return size;
       }
    }手敲的,可能有些错误,自己修正下。