Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[C#] Controls selecteren

Pagina: 1
Acties:
  • 166 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik ben een programma maken met c# waar de gebruiker zelf een plattegrond met computers kan maken.
Ik heb een class laten erfen van een panel en heb hier vervolgens functies ingebouwd om de controls in dit panel door de gebruiken te kunnen laten verschuiven.
Ik wil nu de functie inbouwen waarmee de gebruiker meerdere controls kan selecteren door simpelweg een gebied te selecteren met de muis. Zie onderstaande screenshot.
Afbeeldingslocatie: http://www.st0rm.be/screen.JPG

Wat ik nu heb is simpel gewoon de muisklik events overschreven van de panel en dan een selectiegebied te tekenen. Dit zou perfect zijn geweest, maar hij tekent onder de controls. Zie screenshot.
Afbeeldingslocatie: http://www.st0rm.be/screen2.JPG

Heeft iemand een idee voor wat ik moet doen?

  • MTWZZ
  • Registratie: Mei 2000
  • Laatst online: 13-08-2021

MTWZZ

One life, live it!

ListView gebruiken? Dan krijg je de functionaliteit gratis erbij.

Nu met Land Rover Series 3 en Defender 90


Verwijderd

Topicstarter
MTWZZ schreef op dinsdag 07 februari 2006 @ 11:08:
ListView gebruiken? Dan krijg je de functionaliteit gratis erbij.
Ik denk dat je niet echt begrijpt wat de bedoeling is, een gebruiker moet in staat zijn computers (eigen control) in een panel toe te voegen, en deze vervolgens te kunnen verslepen en verplaatsen. Hier moet de functie dus ook in om meerdere computers te kunnen selecteren.

  • Obliterator
  • Registratie: November 2000
  • Laatst online: 11-11 23:27
Je tekent zo te zien op de background, en die buttons staan daar overheen.
Als je 'computers' geen buttons waren, maar ook zelf getekende objecten zou het wel goed gaan.
Zo'n selectiebox zijn wel standaard functies voor denk ik (ben geen C# persoon). Dat wordt met een XOR gedaan, zodat je hem nog een keer kan tekenen om hem weer weg te halen.

Zie bijvoorbeeld: http://www.codeproject.com/cs/media/MixedRubberBandApp1.asp

[ Voor 13% gewijzigd door Obliterator op 07-02-2006 11:43 ]


Verwijderd

Topicstarter
Obliterator schreef op dinsdag 07 februari 2006 @ 11:29:
Je tekent zo te zien op de background, en die buttons staan daar overheen.
Als je 'computers' geen buttons waren, maar ook zelf getekende objecten zou het wel goed gaan.
Zo'n selectiebox zijn wel standaard functies voor denk ik (ben geen C# persoon). Dat wordt met een XOR gedaan, zodat je hem nog een keer kan tekenen om hem weer weg te halen.

Zie bijvoorbeeld: http://www.codeproject.com/cs/media/MixedRubberBandApp1.asp
Geloof inderdaad dat dit precies is wat ik moet hebben! Ik zal er meteen naar kijken, bedankt!

Verwijderd

Topicstarter
Goed, ik heb de code toegepast op mijn project, maar hij tekent nog steeds onder de controls.
Afbeeldingslocatie: http://www.st0rm.be/screen3.JPG

  • Swadrian
  • Registratie: Augustus 2003
  • Laatst online: 04-06 14:05
Met C# kan je een control, de computer panels dus, naar de achtergrond zetten met de functie .SendToBack(). Misschien heeft dit het effect wat je wil bereiken.

Verwijderd

Topicstarter
Swadrian schreef op dinsdag 07 februari 2006 @ 12:20:
Met C# kan je een control, de computer panels dus, naar de achtergrond zetten met de functie .SendToBack(). Misschien heeft dit het effect wat je wil bereiken.
Klopt, dit heb ik inderdaad al geprobeerd. Maar dit heeft echter geen nut, aangezien ik de selectie op de achtergrond van mijn panel teken, maakt het verder niets uit wat ik met de controls doe.

  • Mastermind
  • Registratie: Februari 2000
  • Laatst online: 29-11 15:35
Je moet een FlowLayoutPanel gebruiken, die heeft wel de juiste properties om controls te selecteren en te slepen.

  • SlowMeDown
  • Registratie: Mei 2003
  • Laatst online: 24-01-2023
Als je toch via een eigen rubberband selectie wilt werken, dan moet je niet naar een control tekenen, maar 'over' alles heen.

Dit kun je doen door rechtstreeks naar het scherm te tekenen. Zie het voorbeeld hieronder. In dit voorbeeld wordt een handle naar de Device Context van het Desktop Window opgevraagd. Via deze HDC kan een .NET graphics instance gemaakt worden.
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[DllImport("user32.dll")]
static extern IntPtr GetDesktopWindow();

[DllImport("user32.dll")] 
static extern IntPtr GetDCEx(IntPtr hwnd, IntPtr hrgn, uint flags); 

private void DrawToDesktop()
{
  IntPtr hdc = GetDCEx(GetDesktopWindow(), IntPtr.Zero, 1027); 

  using(Graphics g = Graphics.FromHdc(hdc)) 
  { 
    g.FillEllipse(Brushes.Red, 0, 0, 400, 400); 
  } 
}   

[ Voor 7% gewijzigd door SlowMeDown op 07-02-2006 13:32 ]


  • riezebosch
  • Registratie: Oktober 2001
  • Laatst online: 31-10 11:58
Verwijderd schreef op dinsdag 07 februari 2006 @ 11:24:
[...]

Ik denk dat je niet echt begrijpt wat de bedoeling is, een gebruiker moet in staat zijn computers (eigen control) in een panel toe te voegen, en deze vervolgens te kunnen verslepen en verplaatsen. Hier moet de functie dus ook in om meerdere computers te kunnen selecteren.
Ik denk dat je niet echt begrijpt wat MTWZZ bedoelt: je kan de layout van een ListView zo instellen dat ie precies er zo uit ziet als nu jouw bedoeling is en daarbij krijg je dan de functionaliteit om meerdere te selecteren cadeau. Tenminste, als ik het goed heb. :)

Edit:
Het verplaatsen lukt dan misschien alleen niet echt :X

[ Voor 5% gewijzigd door riezebosch op 07-02-2006 16:59 ]

Canon EOS 400D + 18-55mm F3.5-5.6 + 50mm F1.8 II + 24-105 F4L + 430EX Speedlite + Crumpler Pretty Boy Back Pack


Verwijderd

Topicstarter
SlowMeDown schreef op dinsdag 07 februari 2006 @ 13:30:
Als je toch via een eigen rubberband selectie wilt werken, dan moet je niet naar een control tekenen, maar 'over' alles heen.

Dit kun je doen door rechtstreeks naar het scherm te tekenen. Zie het voorbeeld hieronder. In dit voorbeeld wordt een handle naar de Device Context van het Desktop Window opgevraagd. Via deze HDC kan een .NET graphics instance gemaakt worden.
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[DllImport("user32.dll")]
static extern IntPtr GetDesktopWindow();

[DllImport("user32.dll")] 
static extern IntPtr GetDCEx(IntPtr hwnd, IntPtr hrgn, uint flags); 

private void DrawToDesktop()
{
  IntPtr hdc = GetDCEx(GetDesktopWindow(), IntPtr.Zero, 1027); 

  using(Graphics g = Graphics.FromHdc(hdc)) 
  { 
    g.FillEllipse(Brushes.Red, 0, 0, 400, 400); 
  } 
}   
Ok, geloof niet dat dit de netste manier is, maar het werkt :)
Ik gebruik dit wel totdat ik iets beters tegenkom, bedankt!

  • GrimaceODespair
  • Registratie: December 2002
  • Laatst online: 02:35

GrimaceODespair

eens een tettenman, altijd ...

riezebosch schreef op dinsdag 07 februari 2006 @ 16:50:
[...]


Ik denk dat je niet echt begrijpt wat MTWZZ bedoelt: je kan de layout van een ListView zo instellen dat ie precies er zo uit ziet als nu jouw bedoeling is en daarbij krijg je dan de functionaliteit om meerdere te selecteren cadeau. Tenminste, als ik het goed heb. :)

Edit:
Het verplaatsen lukt dan misschien alleen niet echt :X
Als je in die Icon-view gaat toch wel? Zoals op de Desktop? Alleen kan hij dan zijn eigen control niet meer gebruiken.

Wij onderbreken deze thread voor reclame:
http://kalders.be


  • Tanuki
  • Registratie: Januari 2005
  • Niet online
Hallo.

Ik weet dat dit wel een erg asociaal grote kick is, maar wij zitten ook met het zelfde probleem.

We moeten voor school een plattegrond maken met daarop PC's.
We hebben nu gewoon een listview gebruikt en die in de "Tile" view gedaan. De PC's staan dus allemaal langs elkaar.

Nu willen we eigenlijk een plattegrond maken m.b.v. coördinaten. Dat is op zich niet zo moeilijk, maar we kunnen niet vinden hoe we de listview net zo kunnen maken als de Windows desktop (wanneer je "Uitlijnen op raster" hebt uitgevinkt).

Wellicht dat iemand hier een schopje in de goeie richting kan geven?

Alvast bedankt. 8)

PV: Growatt MOD5000TL3-XH + 5720wp, WPB: Atlantic Explorer v4 270LC, L/L: MHI SCM 125ZM-S + SRK 50ZS-W + 2x SRK 25ZS-W + SRK 20ZS-W Modbus kWh meter nodig?


  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Het antwoord is niet. Probeer maar eens in de explorer de iconen te verplaatsen. Ook dat is een listview. Je kunt dus geen listview hiervoor gebruiken.

Je kunt beter een panel gebruiken. Een daarop usercontrols (PC, switch, deur, etc) in tekenen.

If it isn't broken, fix it until it is..


  • Tanuki
  • Registratie: Januari 2005
  • Niet online
Niemand_Anders schreef op maandag 01 oktober 2007 @ 10:15:
Het antwoord is niet. Probeer maar eens in de explorer de iconen te verplaatsen. Ook dat is een listview. Je kunt dus geen listview hiervoor gebruiken.

Je kunt beter een panel gebruiken. Een daarop usercontrols (PC, switch, deur, etc) in tekenen.
Hoi,

Heb je daar misschien een voorbeeld van?

PV: Growatt MOD5000TL3-XH + 5720wp, WPB: Atlantic Explorer v4 270LC, L/L: MHI SCM 125ZM-S + SRK 50ZS-W + 2x SRK 25ZS-W + SRK 20ZS-W Modbus kWh meter nodig?


  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
l0c4lh0st schreef op maandag 01 oktober 2007 @ 11:31:
[...]

Hoi,

Heb je daar misschien een voorbeeld van?
Pak een panel.
Bouw een vierkante button.
Photoshop/download een plaatje van een PC.
Gebruik dit plaatje als image van de button (weet niet precies hoe dit in C# gaat, maar zal vast niet moeilijk zijn.)

Kijk hoe die button door de designer in je code wordt gezet, en vervolgens weet je precies hoe je zo'n button kunt toevoegen op een random plek.

Misschien wil je overigens geen button hebben, maar een gewone image control oid, maar je snapt het idee.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info

Pagina: 1