Fenetre MDI, mais aussi avec contrôles...

cs_vbond Messages postés 4 Date d'inscription mercredi 5 novembre 2003 Statut Membre Dernière intervention 6 novembre 2003 - 5 nov. 2003 à 22:38
CyberCoinkoin Messages postés 1 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 23 avril 2004 - 23 avril 2004 à 14:28
Salut,
Je désire réaliser une fenetre qui contient une partie avec des controles standards (labels, boutons, zones de texte...) et en dessous, une zone qui puisse contenir des fenetres filles MDI.
Comment faire, puisque si on positionne IsMDIContainer à true sur une Form, alors celle-ci ne peut plus contenir de controles standards? Et si on laisse IsMDIContainer à false alors on ne peut ajouter de fenetres filles MDI.
(En java ce n'est pas difficile à faire... oups, je vais me faire taper sur les doigts là non? ;o) )

Merci

9 réponses

bucherb Messages postés 412 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 13 août 2007
6 nov. 2003 à 09:54
Une soltion serais de faire une ToolBar dans ta fenetre parente..
Ou une autre serais de faire une autre fenêtre avec tes controls (à la photoshop style)
Ou alors de faire en java ;-)

-------------------------
Trambert le vert
MCP SQL2000, C# .NET, ASP .NET
0
cs_vbond Messages postés 4 Date d'inscription mercredi 5 novembre 2003 Statut Membre Dernière intervention 6 novembre 2003
6 nov. 2003 à 13:56
Merci pour ces idées.
J'avais pensé à faire une autre fenetre style photoshop, mais je n'avais pas pensé à la toolbar.

Quoi qu'il en soit, je trouve dommage qu'il y ait une telle limitation.
Il n'était pas difficile d'implémenter les fenêtres MDI comme cela est fait en JAVA, et cela n'aurait absolument rien enlever au mode de fonctionnement actuel.

Pendant qu'on y est, si j'opte pour la solution "à la photoshop style", y a-t-il moyen de rendre une fenêtre MDI toutjours visible (always on top) facilement?

Merci encore.
0
bucherb Messages postés 412 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 13 août 2007
6 nov. 2003 à 14:03
Euh je sais pas, je dirais que le plus simple moyen c'est de lui redonner le focus quand elle la perd.
Euh non oublie. Sa c'est le plus sur moyen de rien pouvoir faire lol. Sa bloque tout tu peux rien ouvrir d'autre, Même pas le menu démarrer lol

Euh mais a part ça tu peux mettre des controls sur une fenêtre qui est Parent Mdi, le seul ennui c'est qu'ils seront cachés par tes mdi child. Donc rien ne t'empeche de gérer tes mdi pour pas qu'ils recouvrent ta zone de controls...

-------------------------
Trambert le vert
MCP SQL2000, C# .NET, ASP .NET
0
cs_vbond Messages postés 4 Date d'inscription mercredi 5 novembre 2003 Statut Membre Dernière intervention 6 novembre 2003
6 nov. 2003 à 14:47
Mouais, je suis d'accord, mais c'est pas aussi "simple" que je l'aimerais.
Néanmoins ca semble réalisable.
Si je trouve une solution élégante, je la fournirai en tant que source.

To be continued...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bucherb Messages postés 412 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 13 août 2007
6 nov. 2003 à 14:49
Très bon état d'esprit ;-)

-------------------------
Trambert le vert
MCP SQL2000, C# .NET, ASP .NET
0
cs_PetitJean Messages postés 15 Date d'inscription samedi 22 février 2003 Statut Membre Dernière intervention 17 avril 2004
6 nov. 2003 à 17:27
Salut,

Ci-après, un petit exemple de code qui permet d'afficher un controle dans une fenetre MDI.

Pour afficher les fenetres enfants sans cacher les différents contrôles, il suffit de traiter les positions d'affichage des fenetres enfants et le redimensionnement.

Pour mieux faire la différence entre les 2 zones de l'écran, pourquoi ne pas poser les controles sur un panel

En espèrant que cela pourra vous aider ...

--------------------------------------
Le code ...

using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;

public class FormMdi : Form
{
private Button BtNewMdiChild;
private int childCount;

[STAThread]
public static void Main(string[] args)
{
FormMdi MaFormMdi = new FormMdi();
Application.Run(MaFormMdi);
}

public FormMdi()
{
InitializeComponent();
}

private void InitializeComponent()
{
SuspendLayout();
BtNewMdiChild = new Button();
BtNewMdiChild.Size = new Size(100, 24);
BtNewMdiChild.Location = new Point(10, 10);
BtNewMdiChild.Text = "New Form";
BtNewMdiChild.Click += new EventHandler(BtNewMdiChild_OnClick);

IsMdiContainer = true;

Controls.AddRange(new Control[]
{
BtNewMdiChild
});

ResumeLayout(false);
}

private void BtNewMdiChild_OnClick(object sender, EventArgs e)
{
Form child = new Form();
childCount++;
string formText = "Child " + childCount;
child.Text = formText;
child.MdiParent = this;
child.Show();
child.Top = 50;
}
}
0
cs_vbond Messages postés 4 Date d'inscription mercredi 5 novembre 2003 Statut Membre Dernière intervention 6 novembre 2003
6 nov. 2003 à 21:59
Merci.
J'avais essayé de mettre des controles dans la fenetre (qui était définie comme MDIContainer), mais alors l'application plantait (sous C# Builder)
J'ai essayé votre code et ca fonctionne (c'est à rien n'y comprendre).
Il ne reste plus qu'à gérer le positionnement des fenetres filles et le tour est joué.
0
cs_PetitJean Messages postés 15 Date d'inscription samedi 22 février 2003 Statut Membre Dernière intervention 17 avril 2004
6 nov. 2003 à 23:18
Pas de quoi ...
0
CyberCoinkoin Messages postés 1 Date d'inscription vendredi 23 avril 2004 Statut Membre Dernière intervention 23 avril 2004
23 avril 2004 à 14:28
Salut,

Merci à petitJean pour sa solution que j'ai décidé d'adopter (c'est quand même abhérant qu'on soit obligé de faire ça...).
Donc je gère le positionnement de mes fenêtres en surchargeant mes méthodes de la manière suivante :

// Ici j'empeche d'aller avant la position x = 200

protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint (e);
if (this.Location.X < 200) this.Location
= new System.Drawing.Point(200,this.Location.Y);
}

protected override void OnMove(System.EventArgs e)
{
if (this.Location.X < 200)
this.Location =
new System.Drawing.Point (200,this.Location.Y);
base.OnMove (e);
}

mais voila j'ai deux problèmes:

1) le déplacement cause un petit bug graphique lorsque je vais en dela de l'abscisse x=200 (j'ai des scintillements).

2) je ne trouve pas comment gérer la minisation des fenêtres. En effet mes fenêtres minimisées vienne se placer en dessous des x= 200 ce qui évidement ne m'arrange pas.

Si vous pouviez m'aider... Merci
0
Rejoignez-nous