2010-11-06 121 views

Respuesta

10

No se puede inserta otra aplicación en tu formulario.

Sin embargo, puede mover la ventana de la calculadora en la parte superior de su formulario y establecer su formulario como su elemento primario. Esto podría lograr el efecto visual que estás buscando. Puede verificar en la función de API SetParent. Por ejemplo:

System.Diagnostics.Process p = System.Diagnostics.Process.Start("calc.exe"); 
p.WaitForInputIdle(); 
NativeMethods.SetParent(p.MainWindowHandle, this.Handle); 

Una mejor solución podría ser sólo para rodar su propio control de la calculadora en C# si realmente necesita esa funcionalidad embebida en su aplicación. Golpear juntos una calculadora simple realmente no es para nada difícil, y es infinitamente personalizable para hacer y mirar exactamente como quieras.

Algo como esto, tal vez, sería un buen punto de partida si desea rodar su propia calculadora: http://www.codeproject.com/KB/cs/Scientific_Calculator.aspx

y siempre he pensado que este tipo de control sería algún día ridículamente útil si he escrito una aplicación que dependía en gran medida de la entrada numérica: http://www.codeproject.com/KB/miscctrl/C__Popup_Calculator.aspx

+0

pero no se configurará como principal. se abrirá en otra ventana – aliboy38

+0

@ aliboy38 ¿De qué estás hablando? –

+0

la calculadora se abrirá en la ventana independiente. – aliboy38

5

Puede pinvoke SetParent(), el manejador de la ventana secundaria debe ser Process.MainWindowHandle of Calc, la ventana primaria debe ser el manejador de la ventana en la que desea incrustar eso. Form.Handle te da ese valor. También necesitará MoveWindow para obtener la ventana en el lugar correcto. Use pinvoke.net para obtener las declaraciones requeridas de pinvoke.

+0

¿Podría publicar un código de muestra para una mejor comprensión? Gracias –

+2

Google + setparent + mainwindowhandle y dar el primer golpe. –

+0

¿En qué parte de la documentación del SDK indica que las ventanas secundarias deben pertenecer al mismo proceso? – jonsb

-1
using System.Diagnostics; 

try 
    { 
     Process p = null; 
     if (p == null) 
      { 
      p = new Process(); 
      p.StartInfo.FileName = "Calc.exe"; 
      p.Start(); 
      } 
     else 
      { 
       p.Close(); 
       p.Dispose(); 
      } 
     } 
     catch (Exception e) 
      { 
       MessageBox.Show("Excepton" + e.Message); 
      } 
    } 
0

intente a continuación; corre por mi

using System.Diagnostics; 

    private void button1_Click(object sender, EventArgs e) 

     { 
     string filename= "calc.exe"; 

     Process runcalc= Process.Start(filename); 

     while (runcalc.MainWindowHandle == IntPtr.Zero) 
     { 

      System.Threading.Thread.Sleep(10); 

      runcalc.Refresh(); 

     } 
    } 
Cuestiones relacionadas