Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 7 của 7
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Liên kết Windows Forms với màn hình console

    Để làm việc với màn hình console trong windows forms, đầu tiên ta thêm namespace sau:
    Mã:
    using System.Runtime.InteropServices;
    Sau khi đã thêm namespace, ta tiếp tục thêm 2 hàm API sau vào cửa sổ code:

    Mã:
            [DllImport("kernel32.dll")]        public static extern bool AllocConsole(); //mở cửa sổ console        [DllImport("kernel32.dll")]        public static extern bool FreeConsole(); // đóng cửa sổ console
    Để cho đơn giản, mình có 2 button: button1 để in dòng chữ "Hello World" lên màn hình console, button2 dùng để đóng màn hình console này lại. Sau đó thụ lý tình huống Click của 2 button này như sau:

    Mã:
            private void button1_Click(object sender, EventArgs e)        {            AllocConsole();            Console.WriteLine("Hello World");        }         private void button2_Click(object sender, EventArgs e)        {            FreeConsole();        }
    Tất nhiên, bạn có thể cho làm 1 chương trình dạng console thay cho việc in chữ "Hello World" trong sự kiện Click của button1 cũng được [IMG]images/smilies/2.gif[/IMG]
    Chúc bạn thành công!

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Khi mình tạo một Project với dạng Window Forms thì phần nào của chương trình sẽ chỉ ra rằng đây là 1 project Window Forms ạ. Em thấy nó cũng không khác gì một Console project, nhưng ngay cả khi dùng System.Console.WriteLine("Hello World") trước khi khởi tạo form thì cũng chỉ hiện ra trong cửa sổ output, không ở Console.

  3. #3
    Đó là value Subsystem trong Optional Header của PE file, value này do linker set. Windows GUI = 2, Windows Console = 3.

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Cám ơn các anh nhé, em làm được rồi, khi chuyển sang Console thì dòng "Hello World" hiện ra còn cái Form thì biến mất--> Có thể viết cùng lúc 2 chương trình một kiểu cho giao diện Win, 1 cho giao diện Dos, khi biên dịch thì chọn kiểu. Nhưng có thể chuyển biến SubSystem trong lúc chạy chương trình không ạ.

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Không thể thay đổi lúc ct đã run. Khi loader của OS load 1 exe, nó sẽ detect bit này, nếu set to console, OS loader sẽ call NtAllocConsole để create 1 và chỉ 1 console windows. Khi loader jump tới entry point của ct thì console window đã có sẵn cho ct.
    Để GUI app có console, ta có thể call AllocConsole API và attach nó tới Console variable của .NET.

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    solution/project/properties
    1 cửa sổ hiện ra, có thể tùy chỉnh để chương trình dịch ra console hay win form

  7. #7
    Ngày tham gia
    Feb 2014
    Bài viết
    0
    Vậy thì em hiểu rồi, cám ơn anh nhé.

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •