[ad_1]
¡Hola a todos!
Tengo un problema con los TextBoxes en mi formulario.
Captura de pantalla como imagen http://rghost.ru/5011999/image.png
Demostremos la situación con un ejemplo sencillo.
1) Cree un nuevo proyecto de winforms con Form1;
2) Cree un nuevo Form2 y colóquele el control TextBox;
3) Escribamos un código simple que cree la forma no modal;
Form frm = new Form(); frm.StartPosition = FormStartPosition.CenterParent; frm.TopLevel = false; // here is the problem frm.Parent = this; frm.Show(); frm.BringToFront();
Una vez que ejecute este código, aparecerá el formulario con el cuadro de texto.
Escriba algo en el cuadro de texto, por ejemplo “esto es una prueba”. Ahora, intenta seleccionar una parte o un texto completo con el mouse; no puedes porque no funciona.
Sí, puedes seleccionar todo el texto con doble clic, pero no puedes deseleccionarlo después de eso. Además, ¿qué pasa si necesitas seleccionar solo una parte del texto para borrarlo?
Cuando el formulario es modal todo funciona bien.
La misma situación para Memo y supongo que para algunos otros controles de texto.
Todo esto lo necesito porque utilizamos un proyecto MDI serio y dentro de cada formulario MDI el usuario puede abrir diferentes formularios (por ejemplo, formulario de búsqueda). Por supuesto, podemos hacerlos modales, pero este no será el MDI real a partir de ese momento.
¿Alguna sugerencia, por favor?
Solución 3
Reemplazar Parent
con MdiParent
:
Form2 frm = new Form2(); frm.StartPosition = FormStartPosition.CenterParent; frm.TopLevel = false; frm.MdiParent = this; frm.Show(); frm.BringToFront();
Y asegúrese de que su formulario principal tenga IsMdiContainer
establecido en verdadero.
—————
No nos culpes por no explicar tu problema correctamente:
Si entendí bien por tus comentarios tienes 3 formas:
1- MainForm
con IsMdiContainer
establecido en verdadero
2- ChildForm
con MdiParent
ajustado a MainForm
3- AnotherChildForm
. Y quieres que éste sea hijo de ChildForm
.
Si esto es correcto, entonces no podrá deshacerse del error. Para eliminar el error ChildForm
debiera ser ambos MdiContainer
y MdiChild
lo cual no es posible. Debes hacer que el tercer curso sea hijo de MainForm
o no utilizar un formulario (tal vez un UserControl
o algo).
Solución 1
En primer lugar, ¿qué intenta lograr estableciendo TopLevel
a false
? ¿Y por qué llamas? BringToFront()
? Cuando crea un formulario sin modo, aparece automáticamente (se lleva al frente).
En segundo lugar, parece que no entiendes bien la naturaleza de una aplicación MDI, ni la interrelación entre las ventanas secundarias y otras formas.
En tercer lugar, si estás creando una ventana sin modo, deberías hacer algo como esto:
public partial class MyForm { MyModelessForm m_modelessForm = null; private void ShowModelessForm() { if (m_modelessForm == null) { m_modelessForm = new ModelessForm(); // configure the form here if necessary } m_modelessForm.Show(); m_modelessForm.BringToFront(); } }
Solución 2
Suponiendo que establezca la propiedad IsMdiContaine
r de Form1
a verdadero, su código debería leerse así:
Form2 frm2 = new Form2(); frm2.MdiParent = this; frm2.Show();
Solución 4
Intente establecer la propiedad FormBorderStyle del formulario secundario en ‘ninguno’
[ad_2]
コメント