es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Creando un nuevo marco sin crear una nueva ventana.

En mi aplicación tengo cuatro botones, que al hacer clic invocan funciones particulares,

void optionFrame::searchUserClick(wxCommandEvent& event){
  searchFrame* searchUser = new searchFrame(this);
  searchUser->Show();
}

Estoy llamando al constructor y mostrándolo con su función miembro. El problema aquí es que se crea un nuevo marco pero también se crea una nueva ventana.

¿Hay alguna manera de evitar abrir una nueva ventana?

EDIT 1:
La estructura de mi aplicación es la siguiente:
Tengo un marco de nivel superior que se abre cuando la aplicación inicia, tengo algunos botones en ese marco que al hacer clic llevan al usuario a un nuevo marco, pero cuando veo en mi barra de tareas puedo ver 2 ventanas diferentes abiertas y alternar entre ellas.

Pero no quiero que el usuario pueda alternar entre esos marcos, quiero que el usuario pueda ver solo un marco a la vez.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para evitar abrir una nueva ventana cada vez que se hace clic en un botón, puedes modificar tu código verificando si el “searchFrame” ya existe antes de crear una nueva instancia de él.

    Una forma de hacer esto es agregar una variable miembro a tu clase “optionFrame” que contenga un puntero a la instancia de “searchFrame” y luego verificar si ha sido creado antes de llamar al constructor.

    Aquí tienes un ejemplo de cómo se puede implementar esto:

    // declara un puntero a searchFrame como variable miembro de optionFrame
    class optionFrame : public wxFrame {
    private:
        searchFrame* m_searchFrame;
        ...
    };
    
    void optionFrame::searchUserClick(wxCommandEvent& event){
      // verifica si se ha creado la instancia de searchFrame antes
      if (!m_searchFrame) {
        // si no se ha creado, crea una nueva instancia y guarda el puntero
        m_searchFrame = new searchFrame(this);
      }
      // muestra el searchFrame usando su función miembro
      m_searchFrame->Show();
    }
    

    Con esta modificación, el “searchFrame” solo se creará la primera vez que se hace clic en el botón, y clics posteriores mostrarán el “searchFrame” existente sin crear una nueva ventana.

Comments are closed.