OVH Cloud OVH Cloud

Comment ouvrir une form dans un panel ??

10 réponses
Avatar
Philippe
Bonjour

j ai une form Main et une autre form Detail

dans la Main j ai 2 panel
panel gauche qui contienss une NavBar
et PanelDetail qui est vide

je voudrais : ouvrir ma form Detail et qu elle vienne se loger dans le
PanelDetail, sans bordure, sans qu on puisse la deplacer et qu elle
prenne la taille du Panel Detail

comment faire ??

venant de delphi, je faisais ca

Detail.parent := PanelDetail;
Detail.Align := alClient;
Detail.BorderStyle := bsNone;


merci

10 réponses

Avatar
AMP
Philippe a écrit :
Bonjour

j ai une form Main et une autre form Detail

dans la Main j ai 2 panel
panel gauche qui contienss une NavBar
et PanelDetail qui est vide

je voudrais : ouvrir ma form Detail et qu elle vienne se loger dans le
PanelDetail, sans bordure, sans qu on puisse la deplacer et qu elle
prenne la taille du Panel Detail




Le mieux me semble être de faire de ta form un UserControl, que tu
pourra alors manipuler comme un control classic et donc le docker dans
ton panel.

Const.
Avatar
Patrick Philippot
Philippe wrote:
j ai une form Main et une autre form Detail

dans la Main j ai 2 panel
panel gauche qui contienss une NavBar
et PanelDetail qui est vide

je voudrais : ouvrir ma form Detail et qu elle vienne se loger dans
le PanelDetail, sans bordure, sans qu on puisse la deplacer et qu
elle prenne la taille du Panel Detail



Bonjour,

L'approche la plus orthodoxe serait d'encapsuler toute la fonctionnalité
de la Form Detail non pas dans une Form mais dans un Control. Ce
contrôle pourrait être utilisé dans n'importe quelle autre Form comme
bon vous semble.

Néanmoins, une Form est dérivée de Control et vous pouvez donc l'inclure
dans une autre Form ou dans un Control d'une autre Form

frmEmbedded MaForm;

MaForm = new frmEmbedded()
f.TopLevel = false;
this.Controls.Add(f)
f.Show()

this étant le contrôle ou la Form englobante.

Avant de faire le Show vous pouvez modifier les propriétés de Form
include (taille, dimension, bordure, etc.) en fonction de valeurs que
vous récupérez ailleurs: par exemple, vous positionnez les dimensions de
la Form à des valeurs égales aux dimentions du Panel englobant. Vous
pouvez aussi supprimer les accessoires inutiles (autant le faire au
niveau de la conception de cette Form, cependant).

Au niveau du placement, la Form peut être traitée comme un contrôle
ordinaire. *C'est* un Control.

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
Avatar
Philippe
Merci,

je viens d essayer, mais j ai plein d erreur, je precise que je debutes
en C# venant de delphi

je fais ca

private void button1_Click(object sender, System.EventArgs e)
{
// -- Ouverture de la fenetre détail -------------------------
frmEmbedded FDetail;
FDetail = new frmEmbedded();
panel2.TopLevel = false;
this.Controls.Add(f);
f.Show();
}

et voici les erreurs
D:ProjetsCSharpPCM_CLUBMainF_Main.cs(115): Le type ou le nom
d'espace de noms 'frmEmbedded' est introuvable (une directive using ou
une référence d'assembly est-elle manquante ?)

D:ProjetsCSharpPCM_CLUBMainF_Main.cs(121): 'PCM_CLUB.FDetail'
désigne 'classe' où 'variable' était attendu

D:ProjetsCSharpPCM_CLUBMainF_Main.cs(117):
'System.Windows.Forms.Panel' ne contient pas de définition pour 'TopLevel'

D:ProjetsCSharpPCM_CLUBMainF_Main.cs(118): Le nom 'f' n'existe pas
dans la classe ni dans l'espace de noms 'PCM_CLUB.FMain'

D:ProjetsCSharpPCM_CLUBMainF_Main.cs(119): Le type ou le nom
d'espace de noms 'f' est introuvable (une directive using ou une
référence d'assembly est-elle manquante ?)


merci de votre aide

Patrick Philippot a écrit :
Philippe wrote:

j ai une form Main et une autre form Detail

dans la Main j ai 2 panel
panel gauche qui contienss une NavBar
et PanelDetail qui est vide

je voudrais : ouvrir ma form Detail et qu elle vienne se loger dans
le PanelDetail, sans bordure, sans qu on puisse la deplacer et qu
elle prenne la taille du Panel Detail




Bonjour,

L'approche la plus orthodoxe serait d'encapsuler toute la fonctionnalité
de la Form Detail non pas dans une Form mais dans un Control. Ce
contrôle pourrait être utilisé dans n'importe quelle autre Form comme
bon vous semble.

Néanmoins, une Form est dérivée de Control et vous pouvez donc l'inclure
dans une autre Form ou dans un Control d'une autre Form

frmEmbedded MaForm;

MaForm = new frmEmbedded()
f.TopLevel = false;
this.Controls.Add(f)
f.Show()

this étant le contrôle ou la Form englobante.

Avant de faire le Show vous pouvez modifier les propriétés de Form
include (taille, dimension, bordure, etc.) en fonction de valeurs que
vous récupérez ailleurs: par exemple, vous positionnez les dimensions de
la Form à des valeurs égales aux dimentions du Panel englobant. Vous
pouvez aussi supprimer les accessoires inutiles (autant le faire au
niveau de la conception de cette Form, cependant).

Au niveau du placement, la Form peut être traitée comme un contrôle
ordinaire. *C'est* un Control.



Avatar
Patrick Philippot
Philippe wrote:
je viens d essayer, mais j ai plein d erreur, je precise que je
debutes en C# venant de delphi

je fais ca

private void button1_Click(object sender, System.EventArgs e)
{
// -- Ouverture de la fenetre détail -------------------------
frmEmbedded FDetail;
FDetail = new frmEmbedded();
panel2.TopLevel = false;
this.Controls.Add(f);
f.Show();
}



frmEmbedded est un exemple!! Remplacez par le nom de *votre* classe
dérivée de Form.

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
Avatar
Philippe
J ai avancé

je fais ca

Form aFDetail = new FDetail();
aFDetail.TopLevel = false;
panel2.Controls.Add(aFDetail);
aFDetail.Dock = System.Windows.Forms.DockStyle.Fill;

aFDetail.Show();

ca m ouvre bien la fenetre dans le panel, mais y a la bordure
et on peut donc la deplecer et la fermer
comment oter la bordure

est ce que mon code est bon ??

merci


Philippe a écrit :
je fais donc ca

aFDetail FDetail;
aFDetail = new FDetail();
panel2.TopLevel = false;
this.Controls.Add(f);
f.Show();

mais rien ne passe a la compil

je me permets de joindre mon tout petit projet, peut etre pourriez vous
y jeter un coup d oeil et me dire ce qui cloche

le bute c est en cliquant sur le btn du panel de droite que la form
detail se dock dans le panel2

merci de votre aide


Patrick Philippot a écrit :

Philippe wrote:

je viens d essayer, mais j ai plein d erreur, je precise que je
debutes en C# venant de delphi

je fais ca

private void button1_Click(object sender, System.EventArgs e)
{
// -- Ouverture de la fenetre détail -------------------------
frmEmbedded FDetail;
FDetail = new frmEmbedded();
panel2.TopLevel = false;
this.Controls.Add(f);
f.Show();
}





frmEmbedded est un exemple!! Remplacez par le nom de *votre* classe
dérivée de Form.





Avatar
Philippe
Good, j ai trouvé

mais il reste un dernier point,
Quand le clique sur le btn, je peux ouvrir x Fenetre detail
comment empecher que si elle est deja ouverte, je puisse la reouvrir

merci


{
// -- Ouverture de la fenetre détail -------------------------

Form aFDetail = new FDetail();
aFDetail.TopLevel = false;
panel2.Controls.Add(aFDetail);
aFDetail.Dock = System.Windows.Forms.DockStyle.Fill;
aFDetail.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;

aFDetail.Show();
}

merci pour l aide

Philippe a écrit :
J ai avancé

je fais ca

Form aFDetail = new FDetail();
aFDetail.TopLevel = false;
panel2.Controls.Add(aFDetail);
aFDetail.Dock = System.Windows.Forms.DockStyle.Fill;

aFDetail.Show();

ca m ouvre bien la fenetre dans le panel, mais y a la bordure
et on peut donc la deplecer et la fermer
comment oter la bordure

est ce que mon code est bon ??

merci


Philippe a écrit :

je fais donc ca

aFDetail FDetail;
aFDetail = new FDetail();
panel2.TopLevel = false;
this.Controls.Add(f);
f.Show();

mais rien ne passe a la compil

je me permets de joindre mon tout petit projet, peut etre pourriez
vous y jeter un coup d oeil et me dire ce qui cloche

le bute c est en cliquant sur le btn du panel de droite que la form
detail se dock dans le panel2

merci de votre aide


Patrick Philippot a écrit :

Philippe wrote:

je viens d essayer, mais j ai plein d erreur, je precise que je
debutes en C# venant de delphi

je fais ca

private void button1_Click(object sender, System.EventArgs e)
{
// -- Ouverture de la fenetre détail -------------------------
frmEmbedded FDetail;
FDetail = new frmEmbedded();
panel2.TopLevel = false;
this.Controls.Add(f);
f.Show();
}






frmEmbedded est un exemple!! Remplacez par le nom de *votre* classe
dérivée de Form.







Avatar
Patrick Philippot
Philippe wrote:
mais il reste un dernier point,
Quand le clique sur le btn, je peux ouvrir x Fenetre detail
comment empecher que si elle est deja ouverte, je puisse la reouvrir



Utilisez un drapeau (flag) booléen et mettez le à true après la première
création. Vérifiez le à chaque tentative de création. Ou bien désactivez
tous les éléments de l'interface utilisateur permettant cette création
(bouton,...).

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
Avatar
Philippe
J ai bien pensé a ca

mais n y a til pas un moyen de savoir qu une fenetre est deja ouverte ??

Patrick Philippot a écrit :
Philippe wrote:

mais il reste un dernier point,
Quand le clique sur le btn, je peux ouvrir x Fenetre detail
comment empecher que si elle est deja ouverte, je puisse la reouvrir




Utilisez un drapeau (flag) booléen et mettez le à true après la première
création. Vérifiez le à chaque tentative de création. Ou bien désactivez
tous les éléments de l'interface utilisateur permettant cette création
(bouton,...).



Avatar
Aurélien [MS]
Bonjour Philippe,

Tu peux aussi vérifier le nombre de contrôles existant sur ton Panel à
l'aide de Panel1.Controls.Count
S'il y a déjà un contrôle dessus, c'est que ta page de détails est déjà
ouverte


--
Aurélien Norie
Microsoft France
--------------------
Merci de bien vouloir répondre à ce message dans le newsgroup où il a été
posté. Je le consulte régulièrement.


"Philippe" a écrit dans le
message de news: %23%23G$
J ai bien pensé a ca

mais n y a til pas un moyen de savoir qu une fenetre est deja ouverte ??

Patrick Philippot a écrit :
Philippe wrote:

mais il reste un dernier point,
Quand le clique sur le btn, je peux ouvrir x Fenetre detail
comment empecher que si elle est deja ouverte, je puisse la reouvrir




Utilisez un drapeau (flag) booléen et mettez le à true après la première
création. Vérifiez le à chaque tentative de création. Ou bien désactivez
tous les éléments de l'interface utilisateur permettant cette création
(bouton,...).





Avatar
Patrick Philippot
Philippe wrote:
J ai bien pensé a ca

mais n y a til pas un moyen de savoir qu une fenetre est deja ouverte



Si. En énumérant la collection Application.Forms par exemple.

Mais si vous ne voulez qu'une instance de cette classe, le plus court et
le plus propre c'est de par exemple créer une méthode de classe (static)
booléenne (par exemple IsCreated) qui retourne true si la première
instanciation a eu lieu. Ensuite, vous vérifiez simplement si la classe
a déjà été instanciée avec MaClasseForm.IsCreated(). La valeur retournée
par IsCreated peut être stockée dans une variable privée à votre classe.

Vous remettez la variable interne (static également) utilisée par
IsCreated à false dans le destructeur de la classe.

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr