Pergunta : Como posso eu forçar Graphics.MeasureString para considerar o estilo de pia batismal?

Eu estou convertendo uma recolocação que de MessageDialog eu escrevi há algúm tempo para ser controlado inteiramente em vez de usar chamadas do API para algumas de suas funções.  Este diálogo pode ter um título principal e uma opinião do subtítulo ou do detalhe, e ajusta automaticamente sua pia batismal que dependiing no ósmio no uso (Segoe UI para Vista e em 7, Tahoma para XP).  De há um título secundário o título é rendido então que em bold(realce), se não em style.

a fim fazer sob medida corretamente o diálogo eu uso Graphics.MeasureString e passo-o na pia batismal para a comparação, using o SizeF retornado para calcular o tamanho das etiquetas exigidas e assim o tamanho do dialog.

However, quando eu passo a uma pia batismal bold(realce) a MeasureString o valor retornado ignora o estilo bold(realce) e retorna um valor menor do que é realmente necessário que faça com tipicamente que a última palavra no título seja rejeitada (presumivelmente é parte externa a área calculada).  O tamanho retornado é sempre correto para a versão não-bold(realce) do texto provided.

How pode mim causa o tamanho correto ser permitir retornada a diferença no tamanho que a pia batismal bold(realce) exige?  Anotar que eu tentei as sobrecargas que aceitam um parâmetro do stringformat e não fazem nenhuma diferença ao result.

Chirs Bray
class= > " desobstruído " do
> do " codeSnippet " do class= do
class= " lineNumbers " do
class= do
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
class= " do id= " codeSnippet754129 do
-------------------------------
            
SizeF headingSize;
            SizeF subHeadingSize;

            Tamanhos da corda da medida de //
            // que dirige o tamanho 
            headingSize = MeasureString (título, this.headingLabel.Width, headingLabel.Font);

            this.headingLabel.Size = headingSize.ToSize ();

            Subtítulo de // (o tamanho será zero se o singleMessage)
            subHeadingSize = MeasureString (subtítulo, this.subHeadingLabel.Width, subHeadingLabel.Font);
 
------------------------------------------------------------       


tamanho confidencial MeasureString (estreptococo da corda, maxWidth do int, pia batismal da pia batismal)
        {
            utilização (gráficos g = this.CreateGraphics ())
            {
                strRectSizeF de SizeF = g.MeasureString (estreptococo, pia batismal, maxWidth);
                g.Dispose ();

                tamanho novo do retorno ((int) Math.Ceiling (strRectSizeF.Width), (int) Math.Ceiling (strRectSizeF.Height));
            }
        }
class= do

Resposta : Como posso eu forçar Graphics.MeasureString para considerar o estilo de pia batismal?


o código que trabalhou para mim para a auto-cola está abaixo… do mim adicionou um controle da etiqueta com AutoSize = falso com algum texto com o regular de Arial 16 da pia batismal com beira = fixedsingle. Então em um alimentador do clique da tecla eu tive o código below….quando a tecla estalou

duas coisas à nota: eu usei label1.CreateGraphics () e label1.ClientSize (se está trabalhando muito bem com tamanho, a seguir melhor usar o tamanho)
Esta amostra é do => http://msdn.microsoft.com/en-us/library/system.windows.forms.control.creategraphics.aspx
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
vácuo confidencial button1_Click (remetente do objeto, EventArgs e)
        {
            // cria gráficos objeta para o controle.
            Gráficos g = label1.CreateGraphics ();

            Pia batismal N-F = pia batismal nova (label1.Font, FontStyle.Bold);

            // consegue o tamanho necessário acomodar o texto formatado.
            O tamanho preferredSize = g.MeasureString (
               label1.Text, N-F) .ToSize ();

            label1.Font = N-F;
                        
            label1.ClientSize = tamanho novo (preferredSize.Width, preferredSize.Height); // você poderia adicionar algum espaço do estofamento à largura e à altura aqui

            // limpa o objeto dos gráficos.
            g.Dispose ();
        }
Outras soluções  
 
programming4us programming4us