Folks,Làm thế nào để hiển thị dạng trước trong C#
Hãy không ai biết làm thế nào để hiển thị một mẫu từ một ứng dụng khác vô hình, và có nó được sự tập trung (ví dụ: xuất hiện trên các cửa sổ khác)? Tôi đang làm việc trong C# .NET 3.5.
tôi nghi ngờ tôi đã lấy "hoàn toàn cách tiếp cận sai" ... Tôi làm khôngApplication.Run (TheForm mới()) thay vào đó tôi (TheForm mới()). ShowModal(). .. Biểu mẫu về cơ bản là một cuộc đối thoại phương thức, với một vài hộp kiểm; một hộp văn bản, và OK và Hủy bỏ các nút. Người dùng đánh dấu vào một hộp kiểm và các loại trong một mô tả (hoặc bất cứ điều gì) sau đó nhấn OK, biểu mẫu biến mất và quá trình đọc đầu vào của người dùng từ Biểu mẫu, Loại bỏ nó và tiếp tục xử lý.
Tác phẩm này, ngoại trừ khi biểu mẫu hiển thị nó không lấy tiêu điểm, thay vào đó nó xuất hiện phía sau ứng dụng "máy chủ", cho đến khi bạn nhấp vào nó trong thanh tác vụ (hoặc bất kỳ thứ gì). Đây là một hành vi gây phiền nhiễu nhất, mà tôi dự đoán sẽ gây ra nhiều "cuộc gọi hỗ trợ" và phiên bản VB6 hiện tại không có vấn đề này, vì vậy tôi sẽ sử dụng lại ... và người dùng sẽ không chấp nhận điều đó (và cũng không nên họ).
Vì vậy ... Tôi bắt đầu nghĩ rằng tôi cần phải suy nghĩ lại toàn bộ shebang ... Tôi nên hiển thị biểu mẫu phía trước, dưới dạng "ứng dụng bình thường" và đính kèm phần còn lại của quá trình xử lý vào nút OK sự kiện nhấp chuột. Nó sẽ hoạt động, Nhưng điều đó sẽ mất thời gian mà tôi không có (tôi đã qua thời gian/ngân sách) ... vì vậy trước tiên tôi thực sự cần phải cố gắng làm cho phương pháp tiếp cận hiện tại làm việc ... ngay cả bằng cách nhanh chóng và phương pháp bẩn.
Vì vậy, hãy làm bất cứ ai biết cách "buộc" Biểu mẫu .NET 3.5 (bằng phương tiện công bằng hoặc gia cầm) để lấy tiêu điểm? Tôi đang nghĩ đến các lệnh gọi API cửa sổ "ma thuật" (Tôi biết
Chạng vạng: Điều này dường như chỉ là vấn đề khi làm việc, chúng tôi đang sử dụng Visual Studio 2008 trên Windows XP SP3 ... I đã chỉ thất bại trong việc tái tạo các vấn đề với một SSCCE (xem dưới đây) ở nhà trên Visual C# 2008 trên Vista Ulimate ... Điều này hoạt động tốt.Hhh? WTF?
Ngoài ra, tôi thề rằng tại nơi làm việc hôm qua cho thấy các hình thức khi tôi chạy EXE, nhưng không phải khi F5'ed (hoặc Ctrl-F5'ed) trực tiếp từ IDE (mà tôi chỉ đưa lên với) ... Ở nhà hình thức cho thấy tốt một trong hai cách.Tuy nhiên confusterpating!
Có thể có hoặc không liên quan, nhưng Visual Studi o bị rơi và cháy sáng nay khi dự án đang chạy trong chế độ gỡ lỗi và chỉnh sửa mã "đang di chuyển" ... nó đã bị mắc kẹt những gì tôi cho là một vòng lặp vô tận của các thông báo lỗi. Các thông báo lỗi là một cái gì đó về "không thể gỡ lỗi dự án này bởi vì nó không phải là dự án hiện tại, hoặc một cái gì đó ... Vì vậy, tôi chỉ giết nó với quá trình thám hiểm. Nó bắt đầu trở lại tốt, và thậm chí cung cấp để phục hồi" bị mất "tập tin, một lời đề nghị mà tôi chấp nhận
using System;
using System.Windows.Forms;
namespace ShowFormOnTop {
static class Program {
[STAThread]
static void Main() {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
//Application.Run(new Form1());
Form1 frm = new Form1();
frm.ShowDialog();
}
}
}
Bối cảnh:. tôi porting một thực hiện VB6 hiện có để NET ... đó là một 'cắm' cho một 'khách hàng' ứng dụng GIS gọi MapInfo Các. khách hàng hiện tại "làm việc vô hình" và hướng dẫn của tôi là "giữ phiên bản mới càng gần với phiên bản cũ", hoạt động đủ tốt (sau nhiều năm vá), nó chỉ được viết bằng ngôn ngữ không được hỗ trợ, vì vậy chúng tôi cần chuyển
Giới thiệu về tôi: Tôi khá là một noob đối với C# và .NET nói chung, mặc dù tôi đã có chứng chỉ xóa đáy, nhưng tôi đã là lập trình viên chuyên nghiệp trong 10 năm; Vì vậy, tôi sắp xếp "biết một số thứ".
Mọi thông tin chi tiết sẽ được chào đón nhiều nhất ... và Cảm ơn tất cả các bạn đã dành thời gian đọc nội dung này. Sự thỏa hiệp không phải là (rõ ràng) sở trường của tôi.
Chúc mừng. Keith.
Tôi sẽ đi cho nó một burl. Cảm ơn bạn đã gợi ý. Tôi đánh giá cao nó. – corlettk
Đơn giản chỉ cần đặt
this.TopMost = true
trong Form_Load hoạt động như một sự quyến rũ. Cảm ơn bạn, cảm ơn và cảm ơn bạn! – corlettkTôi đã có một vấn đề tương tự, và đã cố gắng sử dụng này.Focus() và this.Activate() trong Load sự kiện không thành công, nhưng thiết lập này.TopMost = true trong sự kiện Load làm việc hoàn hảo cho tôi! Bài đăng tuyệt vời và cảm ơn một triệu câu trả lời. +1 – Jim