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


Ta reda på insättningspunkten?

Postades av 2003-04-26 20:36:30 - Benni Svensson, i forum c# (c-sharp), Tråden har 15 Kommentarer och lästs av 974 personer

I ett formulär så har jag en textbox.
Hur tar jag reda på var insättningspunkten är?
(andemeningen är att jag skall få en osynlig listbox (som skall bli osynlig)att dyka upp där).
Vad jag pratar om borde alltså vara x och y.


Svara

Sv: Ta reda på insättningspunkten?

Postades av 2003-04-26 23:49:41 - Pontus Wång

i winforms läser du av Top och Lefgt på din textbox och i webforms läser du av
Style("left") respektive Style("top") på textboxen.


Svara

Sv: Ta reda på insättningspunkten?

Postades av 2003-04-27 11:02:21 - Benni Svensson

Då börjar jag med att testa av så här:
<code>
int theight = textBoxAnteckning.Height;
int tleft = textBoxAnteckning.Left;


string Msg = "Höjd:" + theight.ToString() + " Vänster: " + tleft.ToString();
MessageBox.Show(Msg);
</code>
Detta fungera ju bra, men jag får inte klart för mig vad det är för måtangivelse?
I Messageboxen får jag reda på Hörjd 104 Vänster 8.
(det kanske inte har någon betydelse men iaf)

När jag sen skall försöka mig på att hitta var insättningpunkten är dvs var i texboxen den befinner sig så rekommenderade du Style("left") respektive Style("top") på textboxen.

Jag kan inte hitta dessa egenskaper, jag gör kanske fel, men det närmaste jag kom var:
textBoxAnteckning.StyleChanged("left")
och så här ville han inte ha det.
Skulle du vilja visa hur jag kan få tag på insättningspunkten i textboxen?


Svara

Sv: Ta reda på insättningspunkten?

Postades av 2003-04-27 11:51:56 - Pontus Wång

Jag rekommenderade Style("left") uti det fall att det var webforms (asp.net), för att ta reda på textboxens position gäller följande:

<code>
int theight = textBoxAnteckning.Height;
int tleft = textBoxAnteckning.Left;
int ttop = textBoxAnteckning.Top;
int twidth = textBoxAnteckning.Width;

string Msg = "Höjd:" + theight.ToString() + " Vänster: " + tleft.ToString() + " Överkant: " + ttop.ToString() + " Bredd: " + twidth.ToString();

MessageBox.Show(Msg);
</code>

Måttenheten som du får antar jag är pixels men jag är inte 100% säker (har inte jobbat så mycket med winforms än)


Svara

Sv: Ta reda på insättningspunkten?

Postades av 2003-04-27 12:07:09 - Benni Svensson

Tack skall du ha. Jag antar att jag är ett steg närmare målet, men det som är intressant är ju insättningspunkten.
Jag har själv ingen ide, men har för mig att i VB tex kunde man ju kolla av med X-Y kordenationerna.
Jag har surfat runt, hittat mycket kul men ändå ingenting som för mig närmare målet.


Svara

Sv: Ta reda på insättningspunkten?

Postades av 2003-04-27 13:48:34 - Pontus Wång

Insättningspunkten? menar du markörens insättningspunkt i en eventuell text?

Om menar kontrollens position så är ju Top = Y-positionen och Left = X-positionen...


Svara

Sv: Ta reda på insättningspunkten?

Postades av 2003-04-27 14:56:45 - Benni Svensson

Jag är rädd att jag inte förstår nu.
Top och Left är ju x , Y för textrutans placering, eller har jag missat någonting nu?


Svara

Sv: Ta reda på insättningspunkten?

Postades av 2003-04-27 19:10:03 - Pontus Wång

Jag förstår bara inte vad du menar med insättningspunkt, definiera begreppet så kan vi nog klara ut missförstånden...


Svara

Sv: Ta reda på insättningspunkten?

Postades av 2003-04-27 19:46:54 - Benni Svensson

Jo, i en textbox, när textboxen är markerad, så blinkar insättningspunkten. Det är just där som jag vill att min combobox skall dyka upp, alltså efter all text som etc finns.


Svara

Sv: Ta reda på insättningspunkten?

Postades av 2003-04-28 16:14:03 - Fredrik Lindberg

Hej.
Jag försökte med följande teknik som dock behöver finslipas lite för att bli riktigt bra.

I textboxens TextChanged event lade jag in följande kod:

<code>
private void txtBox_TextChanged(object sender, System.EventArgs e) {

Graphics g = txtBox.CreateGraphics();
SizeF f = g.MeasureString (txtBox.Text, txtBox.Font);

tooltip.Top = txtBox.Top;
tooltip.Left = txtBox.Left + f.ToSize().Width ;
}
</code>

tooltip är en liten label som jag positionerar till höger om insättningspunkten i texten.
Jag räknar ut storleken på texten i Textboxen via Graphics objektet MeasureString
metod. Detta värde använder jag sedan för att positionera labeln.

Problemet med denna metod är att den inte räknar trailing whitespace för de upptar
ingen plats s a s enligt MeasureString. Dessutom får jag en förskjutning i högerled
på labeln antagligen beroende på avrundningsfel.

Men det kanske är en liten hjälp på vägen?

Mvh
Fredrik


Svara

Sv: Ta reda på insättningspunkten?

Postades av 2003-04-28 20:01:58 - Benni Svensson

Hej Fredrik.
Det är ingen ointressant lösning, men efterson jag inte har jobbat med detta, så är det väll bäst att vi fortsätter diskussionerna.
<code>
Graphics g = textBoxAnteckning.CreateGraphics();
SizeF f = g.MeasureString (textBoxAnteckning.Text, textBoxAnteckning.Font);

comboBox1.Top = textBoxAnteckning.Top;
comboBox1.Left = textBoxAnteckning.TextLength + f.ToSize().Width ;
</code>
Så här har jag det nu.
Min comboBox "rör" på sig, men är alldeles fel placerad.
Den känner inte av höjden, utan är i samma höjd som textboxens överkant. Den är också fel i i förhållandet till textBoxens vänsterkant.
Vad tror du?


Svara

Sv: Ta reda på insättningspunkten?

Postades av 2003-04-29 11:52:10 - Fredrik Lindberg

Ett fel är att du använder egenskapen .TextLength för att räkna ut högerpositionen för comboboxen. Det blir inte rätt eftersom TextLength returnerar antal tecken i strängen.

Du måste utgå från Textboxens vänster position:

comboBox1.Left = textBoxAnteckning.Left + f.ToSize().Width;

Sedan blir jag osäker på var i höjdled du ville placera comboboxen, jag
trodde den skall vara i höjd med textboxen. Om du vill ha den nedanför till
exempel får du lägga till textboxens höjd också:

comboBox1.Top = textBoxAnteckning.Top + textBoxAnteckning.Height;

Hoppas detta blir bättre!
Mvh
Fredrik



Svara

Sv: Ta reda på insättningspunkten?

Postades av 2003-04-30 08:16:38 - Roger Alsing

det killen är ute efter är att få positionen på MARKÖREN.

det är rätt så långt med textbox.left och textbox.top

det är övre vänstra hörnet på textboxen.

för att få markörens pos så ska man använda


vb6 deklarationen är: (ni får översätta till c# själva)
<code>
Public Declare Function GetCaretPos Lib "user32" Alias "GetCaretPos" (lpPoint As POINTAPI) As Long
</code>


http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/Resources/Carets/CaretReference/CaretFunctions/GetCaretPos.asp


NOTE:
om någon tycker det är underligt att "GetCaretPos" int behöver veta från vilken textbox den ska hämta markören så är det för att det bara finns EN! markör i windows , du kan aldrig ha två textboxar som visar markörer samtidigt (om de inte är owner draw dvs , vanliga standardtextboxar kan det inte iaf)

//Roger





Svara

Sv: Ta reda på insättningspunkten?

Postades av 2003-04-30 10:56:33 - Benni Svensson

Hej Roggan.
Nu börjar det liknar någonting.
Jag hittade denna kodsnutten efter lite sökning(nu när jag vet vad jag skall söka efter)
men jag vet inte hur jag skall få till comboboxens top och left.
<code>
First declare this struct:
public struct POINT
{
public int X;
public int Y;

public POINT(int x, int y)
{
this.X = x;
this.Y = y;
}
}
and then try chaning the declaration as:
static extern bool GetCaretPos(ref POINT point);

and then use the method as:
POINT pt = new POINT(0, 0);
GetCaretPos(ref pt);
</code>
Som jag ser det, så innehåller ju POINT pt BÅDE X och Y.


Svara

Sv: Ta reda på insättningspunkten?

Postades av 2003-04-30 13:16:27 - Roger Alsing

jag gissar på att x och y i point'en du får från getcaretpos är i skärm relativa pixel coords..

dvs 0,0 är övre vänstra hörnet på skärmen.

du måste omvandla dessa till klient relativa coords för den host som din combo ska ligga på

säg att det är "form1" som både textboxen och combon ligger på då är det det form1 du ska använda för att omvandla coordsen..

<code>

/*
(NOTE: Point to client använder system.drawing Points. så du får skapa en sådan från din api point)
*/

System.Drawing.Point p=form1.PointToClient(new System.Drawing.Point(apiPoint.x,apiPoint.y));

MyCombo.Location=p; //sätt combon till den clientrelativa positionen
</code>


detta borde funka
(förutsatt att x,y är skärmrelativa pixel coords)

//Roger



Svara

Sv: Ta reda på insättningspunkten?

Postades av 2003-04-30 14:54:00 - Benni Svensson

Du är tydligen ngonting på spåret.
Jag förstär därimot inte:
<code>
/*
(NOTE: Point to client använder system.drawing Points. så du får skapa en sådan från din api point)
*/
</code>
Jag utgår ifrån att du menar:
<code>
using System.Drawing;
</code>
Men jag behöver tydligen en refferens, jag får följande fel:
<code>
E:\C#\SAW\SAW\frmKunder.cs(712): An object reference is required for the nonstatic field, method, or property 'System.Windows.Forms.Control.PointToClient(System.Drawing.Point)'
</code>
Vilken referensfil är det isf?


Svara

Nyligen

  • 08:28 Butiksskyltar: Hur upplever utbude
  • 22:31 Slappna av
  • 19:55 kick-off med fokus på hälsa?
  • 19:53 kick-off med fokus på hälsa?
  • 16:24 Föreslå en skönhetsklinik online
  • 16:23 Föreslå en skönhetsklinik online
  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper

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 570 838
27 960
271 761
1 046
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