Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Få in texten centrerad i en usercontrol

Postades av 2004-12-27 14:00:59 - Benni Svensson, i forum c# (c-sharp), Tråden har 15 Kommentarer och lästs av 715 personer

Jag håller på att göra om en control som går ut på att ha en vertikaltext, med två färgers bakgrund.
Mitt problem är att jag inte kan centrera texten.
<code>
float hojd = (this.Height/2 - VertikalText.Length)/2 ;
float bred = (this.Width /2);
Font minFont = new Font("Bauhaus 93",20);
Graphics g = e.Graphics;
g.TranslateTransform(bred -2,hojd -2);
g.RotateTransform(-90.0f);
g.DrawString(VertikalText, minFont, new SolidBrush(textColor1), 0.0f, 0.0f);
g.ResetTransform();
</code>
Det finns två barametrar här som jag har krabbat med hojd och bred.
Om vi börjar med bred, så skall den ju vara på hälften av controllens bred, men det skiter sig pga textens storlek, hur gör jag där?
Hojd är ännu värre.
Som jag har tänkt, så utgår jag ifrån controlens höjd/2 - halva textens längd.
Hur jag än gör så går det åt skogen.
Några tips?
[REDIGERAT]
När det gäller bred så har jag lyckats med att lösa det.
<code>
float bred = (this.Width /2)-(Font.Height/2);
</code>
..nu gäller det bara höjden...


Svara

Sv: Få in texten centrerad i en usercontrol

Postades av 2004-12-27 15:08:42 - Johan Normén

Benni,

Du har TextAlign denn kan du ändra så den blir centrerad, kanske kan vara en liten hjälp på vägen?

Lite svårt att förstå exakt vad du vill. Men TextAlign gör att texten hamnar där du vill ha den i textrutan.

Mvh Johan


Svara

Sv:Få in texten centrerad i en usercontrol

Postades av 2004-12-27 15:24:24 - Benni Svensson

Johan.
Nej jag skriver ju ut texten direkt på kontrollen
<code>
(private void v_Text_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
</code>
..och där kan jag inte hitta de egenskaperna.
Min ide är så här. Denna kontrollen skall jag ha till vänster, och går uppifrån och ner med en bred av ca 20 px. Texten som skrivs in blir(redan klart) vertikalt.
Om jag utgår ifrån 0 så börjar texten högst upp och skriver utanför formuläret.
Om jag utgår ifrån this.Height, så skrivs texten ut med början ifrån det nedersta vänstra hörnet på kontrollen.
Rimligen så borde jag hitta mitten med
<code>
float hojd =(this.Height/2) + (VertikalText.Length/2);
</code>
Detta borde ju rimmligen göra så att texten blir på mitten, men nix.
Jag börjar nu också misstänka att jag labborera med två måttenheter, jag tror inte att kontrollens mått är i px men jag misstänker att texten(VertikalText.Length) blir det.


Svara

Sv: Få in texten centrerad i en usercontrol

Postades av 2004-12-27 15:40:55 - Andreas Håkansson

Benni,

Innan du roterar texten så räknar du ut dimensionern apå den med <b>MeasureString</b>-metoden som finns på ditt <b>Graphics</b>-objekt. Metoden returnerar en <b>SizeF</b> variabel som innehåller bredden och höjden på texten när den skrivs ut med den angivna fonten. Vad du nu tar är <b>Höjden</b> på den texten och använder den i dina beräkningar eftersom denna blir din bredd när du väl roterat strängen.

Hoppas det löser sig!


Svara

Sv: Få in texten centrerad i en usercontrol

Postades av 2004-12-27 15:43:00 - Johan Normén

Benni,

... Såg att Andreas redan hunnit före... ;-)

Mvh Johan


Svara

Sv:Få in texten centrerad i en usercontrol

Postades av 2004-12-27 16:14:21 - Benni Svensson

Jag gjorde så här:
<code>
MessageBox.Show(g.MeasureString(VertikalText,minFont).ToString());
</code>
... och får mycket riktigt ut
{width=403,6805,height-33,51562}
men jag förstår inte hur jag skall hantera dessa tal.


Svara

Sv: Få in texten centrerad i en usercontrol

Postades av 2004-12-27 16:18:57 - Andreas Håkansson

Benni,

Om du rundar uppåt till närmaste heltal så kan du använda dessa till att veta höjden resp. bredden på den vertikala texten. Det var väl det som du vill? För om du roterar 90grader så blir juh Höjd->Bredd och Bredd->Höjd, eller har jag missförstått dig totalt? =) Jag utgår i från (baserat på din kod) att du vrider texten och <b>inte</b> skriver ut den vertikalt så som

A
N
D
R
E
A
S

Utan som ANDREAS och sen roterar du hela den 90 grade moturs?


Svara

Sv:Få in texten centrerad i en usercontrol

Postades av 2004-12-27 16:26:10 - Benni Svensson

Du har rätt att jag vrider texten 90grader, men jag ville ha det dynamiskt.
Dvs har jag ett formulär som är 200 högt så ville jag börja på 100. *Skriver jag då in fyra bokstäver så
skulle den börja på 98.
Är du med på hur jag menar.
Dit förslag på MeasureString låter ju intressant, men jag förstår inte hur jag skall hantera siffrorna där (eller ta ut dem).
<code>
Font minFont = new Font("Bauhaus 93",20);
Graphics g = e.Graphics;
g.MeasureString(VertikalText,minFont)
</code>
Så här långt är jag med men sen så...
(nu har jag hållit dig sysselsatt bra länge Andreas...)


Svara

Sv: Få in texten centrerad i en usercontrol

Postades av 2004-12-27 16:33:20 - Andreas Håkansson

Benni,

Så problemet är att när du har roterat din text så vill du skriva ut den <b>centrerat</b>, både vertikalt och hotizontalt, på kontrollens yta? Har jag uppfattat dig korrekt nu då? =)


Svara

Sv:Få in texten centrerad i en usercontrol

Postades av 2004-12-27 16:50:48 - Benni Svensson

Helt korrekt


Svara

Sv: Få in texten centrerad i en usercontrol

Postades av 2004-12-27 17:03:11 - Andreas Håkansson

Benni,

Prova något i stil med (Obs! Helt otestad kod, skriven för hand så det kan finnas fel)

SizeF textStorlek = g.MeasureString(VertikalText,minFont)
float offsetX = ((this.Width / 2) - (Math.Ceiling(textStorlek.Height)));
float offsetY = ((this.Height / 2) - (Math.Ceiling(textStorlek.Width)));

g.DrawString(VertikalText, minFont, new SolidBrush(textColor1), (float)offsetX, (float)offsetY);


<b>Math.Ceiling</b> används för att runda upp till närmaste heltal.


Svara

Sv:Få in texten centrerad i en usercontrol

Postades av 2004-12-27 17:26:43 - Benni Svensson

Nej tyvärr, texten försvann alldeles.
Jag fick ändra lite:
<code>
SizeF textStorlek = g.MeasureString(VertikalText,minFont);
float offsetX = Convert.ToInt64(((this.Width / 2) - (Math.Ceiling(textStorlek.Height))));
float offsetY = Convert.ToInt64(((this.Height / 2) - (Math.Ceiling(textStorlek.Width))));
</code>
..men det kan ju inte vara det som ställer till det.


Svara

Sv: Få in texten centrerad i en usercontrol

Postades av 2004-12-27 18:39:07 - Andreas Håkansson

Benni,

Nu är jag hemma från jobb så nedan finner du ett fullt fungerande exempel på en kontroll som ritar roterad text centrerat i en usercontrol. Mycket nöje.

using System;
using System.Collections;
using System.Diagnostics;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Windows.Forms;

namespace ControlExample
{
	public class TextControl : System.Windows.Forms.UserControl
	{
		private string verticalText = "Andreas";
		private System.ComponentModel.Container components = null;

		public TextControl()
		{
			InitializeComponent();
		}

		protected override void Dispose( bool disposing )
		{
			if( disposing )
			{
				if(components != null)
				{
					components.Dispose();
				}
			}
			base.Dispose( disposing );
		}

		[Browsable(true)]
		public string VerticalText
		{
			get { return this.verticalText; }
			set
			{
				this.verticalText = value;
				this.Invalidate();
			}
		}

		#region Component Designer generated code

			private void InitializeComponent()
			{
				this.Name = "TextControl";
				this.Resize += new System.EventHandler(this.TextControl_Resize);
				this.Paint += new System.Windows.Forms.PaintEventHandler(this.TextControl_Paint);
			}

		#endregion

		private void TextControl_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
		{
			if( this.VerticalText != String.Empty )
			{
				Graphics g = e.Graphics; 

				SizeF textStorlek = g.MeasureString(this.VerticalText,this.Font);
				float offsetX = (float)((this.Width / 2) - (Math.Ceiling(textStorlek.Height) / 2));
				float offsetY = (float)((this.Height / 2) + (Math.Ceiling(textStorlek.Width) / 2));

				g.TranslateTransform(offsetX,offsetY);  
				g.RotateTransform(-90.0f); 
				g.DrawString(this.VerticalText, this.Font, new SolidBrush(this.ForeColor), 0, 0);			
				g.ResetTransform(); 
			}
		}

		private void TextControl_Resize(object sender, System.EventArgs e)
		{
			this.Invalidate();
		}
	}
}


Svara

Sv:Få in texten centrerad i en usercontrol

Postades av 2004-12-27 19:48:43 - Benni Svensson

Hej Håkan och tusen tack.
Nu när jag har fått pular lite granna, så har jag fått det helt pefekt.
En stilla undran, varför behöll du mina variabler(hojd,bred) när du inte använde dem?


Svara

Sv: Få in texten centrerad i en usercontrol

Postades av 2004-12-27 21:23:50 - Andreas Håkansson

Benni,

Jag tog helt enkelt inte bort det - glömde. Har uppdaterat mitt exempel nu =)


Svara

Sv:Få in texten centrerad i en usercontrol

Postades av 2004-12-27 23:30:47 - Benni Svensson

Jag pratade med Pelle om att ha en plats enbart för usercontrol, för att kunna dela med sig.
Vad tror du om det?


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 165
27 952
271 704
588
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies