2009-10-10 13 views
17

में खोला मैं इस सूत्र में कुछ स्रोत कोड इतने पर यहाँ रेक्स लोगान द्वारा पोस्ट की गई पाया:स्थापना स्थिति एक WinForms अनुप्रयोग

link text

... वहाँ भी कुछ बहुत ही दिलचस्प कोड तैनात फोरडेकर द्वारा इसी धागे में, लेकिन यह अधूरा और जटिल है: मैं ट्रेस सुविधा पर पर्याप्त नहीं हूं कि यह पूरी तरह कार्यान्वित कैसे करें ...

मैं इस कंसोल कोड रेक्स का उपयोग करने में सक्षम हूं (कृपया) विभिन्न घटनाओं को लॉग इन करने और मैसा को धक्का देने के लिए WinForms एप्लिकेशन में सफलतापूर्वक पोस्ट किया गया जीएस जो डीबगिंग में उपयोगी हैं; मैं इसे एप्लिकेशन कोड से भी साफ़ कर सकता हूं।

मैं ऐसा नहीं कर सकता कि कंसोल विंडो की स्क्रीन स्थिति को विश्वसनीय रूप से सेट करना है जब मैं कंसोल विंडो खोलता हूं (मुख्य फ़ॉर्म लोड ईवेंट में)। मैं System.ArgumentOutOfRangeException त्रुटियों को अवरुद्ध संकलन करता है, तो मैं इस तरह WindowLeft या WindowTop गुणों को सेट करने की कोशिश मिलती है:

विंडो की स्थिति ऐसी कि वर्तमान विंडो आकार कंसोल के बफर के भीतर फिट बैठता सेट किया जाना चाहिए, और संख्या नकारात्मक नहीं होना चाहिए। पैरामीटर नाम: वास्तविक मूल्य छोड़ दिया था #

मैं कर रहा हूँ, फिर भी, WindowWidth और WindowHeight गुणों को सेट करने। में

    में Program.cs से पहले MainForm InitializeComponent '
  1. से पहले और करने के लिए कॉल के बाद रन' है फ़ाइल
  2. ():

    मैं कोड है कि कंसोल विभिन्न स्थानों सहित सक्रिय हो जाता है चलती की कोशिश की है

  3. फार्म लोड घटना
  4. फार्म में में ctor MainForm दिखाया घटना

Conso कोड में इन सभी स्थानों में ले को ठीक से सक्रिय किया गया था, लेकिन स्क्रीन के ऊपरी-बाएं चतुर्भुज में जहां कहीं भी यादृच्छिक स्विचिंग में कोई बदलाव नहीं आया था।

जहां कंसोल विंडो खुलती है यादृच्छिक रूप से भिन्न होती है (मुख्य फ़ॉर्म हमेशा स्क्रीन पर उसी स्थान पर प्रारंभ होता है)।

उत्तर

36

आप इस तरह कुछ कोशिश कर सकते हैं।

यह कोड कंसोल विंडो की स्थिति कंसोल अनुप्रयोग में सेट करता है।

using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Runtime.InteropServices; 


namespace ConsoleApplication10 
{ 
    class Program 
    { 
    const int SWP_NOSIZE = 0x0001; 


    [DllImport("kernel32.dll", ExactSpelling = true)] 
    private static extern IntPtr GetConsoleWindow(); 

    private static IntPtr MyConsole = GetConsoleWindow(); 

    [DllImport("user32.dll", EntryPoint = "SetWindowPos")] 
    public static extern IntPtr SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int x, int Y, int cx, int cy, int wFlags); 

    static void Main(string[] args) 
    { 
     int xpos = 300; 
     int ypos = 300; 
     SetWindowPos(MyConsole, 0, xpos, ypos, 0, 0, SWP_NOSIZE); 
     Console.WriteLine("any text"); 
     Console.Read(); 
    } 
    } 
} 

इस कोड को एक WinForm आवेदन में कंसोल विंडो की स्थिति सेट।

using System; 
using System.Collections.Generic; 
using System.Windows.Forms; 
using System.Runtime.InteropServices; 


namespace WindowsFormsApplication10 
{ 
    static class Program 
    { 

    const int SWP_NOSIZE = 0x0001; 

    [System.Runtime.InteropServices.DllImport("kernel32.dll")] 
    private static extern bool AllocConsole(); 

    [DllImport("user32.dll", EntryPoint = "SetWindowPos")] 
    public static extern IntPtr SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int x, int Y, int cx, int cy, int wFlags); 

    [DllImport("kernel32.dll", SetLastError = true)] 
    public static extern IntPtr GetConsoleWindow(); 

    [STAThread] 
    static void Main() 
    { 
     AllocConsole(); 
     IntPtr MyConsole = GetConsoleWindow(); 
     int xpos = 1024; 
     int ypos = 0; 
     SetWindowPos(MyConsole, 0, xpos, ypos, 0, 0, SWP_NOSIZE); 
     Console.WindowLeft=0; 
     Console.WriteLine("text in my console"); 

     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     Application.Run(new Form1()); 
    } 
    } 
} 
+0

धन्यवाद, आरआरयूजेड; मैं रेक्स लोगान द्वारा पोस्ट किए गए बेस कोड में अपना कोड शामिल करने में सक्षम था और कंसोल विंडो सेट करता था जहां मैं इसे चाहता था। मैं सिर्फ उत्सुक हूं: 'Console.Read() को कॉल क्यों करें?यह एक WinForms ऐप है जिसे मैं चला रहा हूं, और मैं केवल "लॉगिंग" के लिए कंसोल का उपयोग कर रहा हूं: क्या WinForm ऐप के भीतर से कंसोल प्रारंभ करते समय यह एक मानक बात है? बहुत धन्यवाद! सबसे अच्छा, बिल – BillW

+0

@ बिलवा - यह वहां है ताकि खिड़की तब तक दिखाई दे जब तक आप 'वापसी' नहीं दबाते। उदाहरण विंडो की स्थिति को सेट करने के बाद कुछ भी नहीं करता है, इसलिए बस बंद हो जाएगा और आप नहीं देखेंगे कि इसकी सही स्थिति है। – ChrisF

+0

हाय क्रिसफ़, आपकी प्रतिक्रिया के लिए धन्यवाद! fyi: रेक्स लोगान द्वारा पोस्ट किए गए कोड का उपयोग करके मैंने अपने मूल अनुरोध में लिंक किया है, कंसोल विंडो कंसोल पर कॉल के लिए बिना किसी आवश्यकता के बनी रहती है। पढ़ें()। सर्वश्रेष्ठ, बिल – BillW

संबंधित मुद्दे