[.net2] Form s'affichant comme une combobox

Lucyberad Messages postés 414 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 26 juillet 2007 - 16 janv. 2006 à 21:32
Lucyberad Messages postés 414 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 26 juillet 2007 - 17 janv. 2006 à 18:58
Bonjour a tous,

mon titre parait vague, mais c'est plutot dur de definir vraiment en 1 phrase.
donc voici ce que j'aimerais faire:
j'aimerais faire un carré ou je peut mettre n'importe quel controle, le truc c'est que seul une partie de ce carré est affiche et que le tout s'affiche quand soit on appuie sur une fleche (dans la partie visible) soit quand on passe la souris dessus et quand la souri ressort de la zone, elle reprend une taille petite.
le mieux est de faire un dessin, voici un petit dessin :

ceci est un photo montage de ce que je voudrai. j'ai mis un petit groupbox derriere pour bien montrer que quand la partie est agrandie elle ne change pas la taille du groupbox mais se "pose dessus" a la maniere d'un combobox (sinon j'aurai pu trouver comment faire mais la c un peu dur)

merci de m'aider pour ce prblm qui (je ne sait pas) peut en fait se reveler tres simple, ou bien se reveler tres difficile.

L U C Y I3 E R @ D

2 réponses

Utilisateur anonyme
16 janv. 2006 à 22:33
Bonsoir,

En faite, c'est assez compliquer.
J'ai codé une approche (assez rapidement), sans trop faire de détails. (Juste pour les testes et pour voir si, en gros, ca marche)

Le p'tit code (désolé pour les couleurs, la mise en formes ne se fait pas automatiquement , et c'est trop long de le faire à la main )

_______________________________________________________________________________

Option Explicit On
Option Strict On

Public Class Form1

Private WithEvents DroleDeCombo1 As New DroleDeCombo
Private WithEvents Btn As New System.Windows.Forms.Button

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
MyClass.DroleDeCombo1.Location = New System.Drawing.Point(100, 100)
MyClass.DroleDeCombo1.Size = New System.Drawing.Size(120, 21)
MyBase.Controls.Add(MyClass.DroleDeCombo1)

MyClass.Btn.Location = New System.Drawing.Point(10, 10)
MyClass.Btn.Size = New System.Drawing.Size(80, 22)
MyClass.DroleDeCombo1.PnlForm.Controls.Add(MyClass.Btn)
End Sub

Private Sub Btn_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Btn.Click
System.Windows.Forms.MessageBox.Show("Hello World !!!")
End Sub

End Class

Public Class DroleDeCombo
Inherits System.Windows.Forms.Control

Public WithEvents PnlForm As New System.Windows.Forms.Form

Dim ClientBounds As System.Drawing.Rectangle
Dim DropDownButtonBounds As System.Drawing.Rectangle
Dim DropDrownState As System.Windows.Forms.ButtonState
Dim FormSize As System.Drawing.Size

Public Sub New()
MyBase.BackColor = System.Drawing.Color.White
MyClass.PnlForm.FormBorderStyle = FormBorderStyle.None
MyClass.PnlForm.BackColor = System.Drawing.Color.White
MyClass.PnlForm.StartPosition = FormStartPosition.Manual
Call CalcSize()
End Sub

Protected Overrides Sub OnResize(ByVal e As System.EventArgs)
Call CalcSize()
MyBase.OnResize(e)
End Sub

Private Sub CalcSize()
MyClass.ClientBounds = New System.Drawing.Rectangle(0, 0, MyBase.ClientRectangle.Width - 1, MyBase.ClientRectangle.Height - 1)

MyClass.DropDownButtonBounds = MyClass.ClientBounds
MyClass.DropDownButtonBounds.Width = MyClass.DropDownButtonBounds.Height
MyClass.DropDownButtonBounds.X = MyClass.ClientBounds.Width - MyClass.DropDownButtonBounds.Width

MyClass.FormSize = New System.Drawing.Size(MyClass.ClientBounds.Width, 200) '// Taille au pif, mettre une prop. pour la régler

End Sub

Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
System.Windows.Forms.ControlPaint.DrawVisualStyleBorder(e.Graphics, MyClass.ClientBounds)
System.Windows.Forms.ControlPaint.DrawComboButton(e.Graphics, MyClass.DropDownButtonBounds, MyClass.DropDrownState)
MyBase.OnPaint(e)
End Sub

Protected Overrides Sub OnMouseDown(ByVal e As System.Windows.Forms.MouseEventArgs)
If DropDownButtonBounds.Contains(e.Location) Then
MyClass.DropDrownState = ButtonState.Pushed
MyBase.Invalidate(DropDownButtonBounds)
MyClass.PnlForm.Location = New System.Drawing.Point(MyBase.RectangleToScreen(MyClass.ClientBounds).Left, MyBase.RectangleToScreen(MyClass.ClientBounds).Bottom)
MyClass.PnlForm.Show()
End If
MyBase.OnMouseDown(e)
End Sub

Protected Overrides Sub OnMouseUp(ByVal e As System.Windows.Forms.MouseEventArgs)
If DropDownButtonBounds.Contains(e.Location) Then
MyClass.DropDrownState = ButtonState.Normal
MyBase.Invalidate(DropDownButtonBounds)
End If
MyBase.OnMouseUp(e)
End Sub

Private Sub PnlForm_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles PnlForm.MouseLeave
If MyClass.PnlForm.ClientRectangle.Contains(Windows.Forms.Cursor.Position) = False Then
DropDrownState = ButtonState.Normal
MyBase.Invalidate(DropDownButtonBounds)
MyClass.PnlForm.Hide()
End If
End Sub

Private Sub PnlForm_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PnlForm.Paint
System.Windows.Forms.ControlPaint.DrawVisualStyleBorder(e.Graphics, New System.Drawing.Rectangle(0, -1, MyClass.PnlForm.ClientRectangle.Width - 1, MyClass.PnlForm.ClientRectangle.Height))
End Sub

End Class

_______________________________________________________________________________

Donc, ce code très bref et mal fait, devrait faire le principale de ce que tu veut faire (mise à part les éventuelles erreurs. (Pas de design xp, taille de la zone ...)

Vois déjà ca. Si ca te convient, j'essaierais de l'améliorer. (Dans quelques jours car je suis débordé avec le travail).

Kenji
<hr size="2" width="100%">
Merci de cliquer sur "Réponse acceptée" si une réponse vous convient.
0
Lucyberad Messages postés 414 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 26 juillet 2007 3
17 janv. 2006 à 18:58
ok ben je vais bucher dessus ^^
merci de to aide !

L U C Y I3 E R @ D
0
Rejoignez-nous