Je construis une application Windows Forms en C# et ai un TrackBar
sur mon formulaire. Comment puis-je calculer la position (pixel) de la pointe du tracker? Je voudrais tracer une ligne de là à un autre point sur mon formulaire. En outre, je voudrais aussi calculer la position x la plus basse et la plus haute possible de la pointe.Comment obtenir la position du tracker d'un .NET TrackBar?
1
A
Répondre
6
Le contrôle Windows natif qui est enveloppé par TrackBar a une restriction gênante, vous ne pouvez pas obtenir les positions pour les premières et dernières marques de tic. Vous pouvez cependant obtenir les rectangles d'affichage pour le canal et le curseur. Cette classe les renvoie:
using System;
using System.Windows.Forms;
using System.Drawing;
using System.Runtime.InteropServices;
class MyTrackBar : TrackBar {
public Rectangle Slider {
get {
RECT rc = new RECT();
SendMessageRect(this.Handle, TBM_GETTHUMBRECT, IntPtr.Zero, ref rc);
return new Rectangle(rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top);
}
}
public Rectangle Channel {
get {
RECT rc = new RECT();
SendMessageRect(this.Handle, TBM_GETCHANNELRECT, IntPtr.Zero, ref rc);
return new Rectangle(rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top);
}
}
private const int TBM_GETCHANNELRECT = 0x400 + 26;
private const int TBM_GETTHUMBRECT = 0x400 + 25;
private struct RECT { public int left, top, right, bottom; }
[DllImport("user32.dll", EntryPoint = "SendMessageW")]
private static extern IntPtr SendMessageRect(IntPtr hWnd, int msg, IntPtr wp, ref RECT lp);
}
Voici une utilisation de l'échantillon sous une forme, il dessine une ligne de la première coche au pointeur de curseur:
private void myTrackBar1_ValueChanged(object sender, EventArgs e) {
this.Invalidate();
}
protected override void OnPaint(PaintEventArgs e) {
var chan = this.RectangleToClient(myTrackBar1.RectangleToScreen(myTrackBar1.Channel));
var slider = this.RectangleToClient(myTrackBar1.RectangleToScreen(myTrackBar1.Slider));
e.Graphics.DrawLine(Pens.Black, chan.Left + slider.Width/2, myTrackBar1.Bottom + 5,
slider.Left + slider.Width/2, myTrackBar1.Bottom + 5);
}
Questions connexes
- 1. Comment obtenir la position du curseur
- 2. Bug Tracker gratuit dans .NET
- 3. comment obtenir les pairs d'un torrent tracker
- 4. Comment obtenir la position du cadre UIView après la transformation?
- 5. Obtenir la position du gtk.StatusIcon sur Windows
- 6. Comment obtenir la position du curseur dans bash?
- 7. Obtenir la position, la largeur et la hauteur du graphique
- 8. Question sur le contrôle WinForms TrackBar dans .Net
- 9. Comment obtenir la position de la souris?
- 10. Comment obtenir la position() d'un XElement?
- 11. Comment utiliser les flottants avec TrackBar
- 12. Obtenir la position de pdfptable
- 13. Comment obtenir la position de l'élément
- 14. Obtenir la position par rapport à la fenêtre du navigateur
- 15. Comment est-ce que je sens la fin d'un rouleau d'utilisateur d'un .Net TrackBar?
- 16. Comment fonctionne Cell Minute Tracker?
- 17. Comment obtenir la position de chaque caractère
- 18. Comment obtenir la position supérieure d'un élément?
- 19. Comment obtenir la position d'un élément enfant
- 20. comment obtenir la position de simplexmlobject php
- 21. Signification de trackbar
- 22. Obtenir la position de JPopupMenu
- 23. obtenir la position de l'élément
- 24. Comment convertir la valeur entière de contrôle .NET Trackbar à virgule flottante pourcentage
- 25. Obtenir la position du menu de démarrage de Windows
- 26. C#: Comment combiner TrackBar avec ProgressBar
- 27. Comment faire un ownerdraw Trackbar dans WinForms
- 28. Comment faire une TrackBar continue en C#?
- 29. Obtenir la position $ _SESSION avec &
- 30. Obtenir la position du curseur dans une zone de texte
Malheureusement mon code doit aussi fonctionner avec Mono. .. – Danvil
Abandonnez tout espoir, vous ne pouvez pas faire ce travail sur Mono. Créez votre propre contrôle TrackBar. Pourrait être amusant. Ish. –
* snief * J'ai donc simplement "piraté" une solution en prenant la dimension de contrôle et une valeur estimée pour le remplissage. Cela fonctionne au moins sur cet ordinateur exécutant cet os ... – Danvil