2017-04-04 21 views
5

Chúng tôi có một ứng dụng biểu mẫu cửa sổ .net cũ. Chúng tôi đã thay thế hầu hết bằng ứng dụng web nhưng vẫn sử dụng ứng dụng biểu mẫu cửa sổ cho các tác vụ quản trị.Tại sao biểu tượng chiến thắng hiển thị khác nhau trên cùng màn hình 4k

Khi ứng dụng này được sử dụng trên màn hình 4k, nó trông thực sự xấu, và đó là điều dễ hiểu.

Nhưng giao diện thay đổi tùy thuộc vào các màn hình khác trên hệ thống. Các thử nghiệm được thực hiện trên một 430 lenovo trong đó có một màn hình 4k kết nối thông qua cổng hiển thị. Độ phân giải trên màn hình máy tính xách tay là 1920/1080 và trên màn hình 4k của nó là 3840/2160. Tỷ lệ hiển thị luôn là 200%.

Tất cả các ảnh chụp màn hình sau đây được chụp trên màn hình 4k.

  1. Một thử nghiệm với cả hai màn hình hoạt động
  2. Một thử nghiệm với màn hình thứ hai chỉ
  3. Một thử nghiệm với màn hình máy tính xách tay đóng (có nghĩa là chỉ có một màn hình có sẵn cho hệ thống)

enter image description here enter image description here enter image description here

Tôi biết rằng ứng dụng của chúng tôi trên sẽ không nhìn tốt trên 4k mà không có thay đổi và thiết lập dpiAware/dpiAwareness.

Nhưng câu hỏi của tôi là: Tại sao các ứng dụng trông chỉ thay đổi tùy thuộc vào màn hình nào đang hoạt động? Và có cách nào để kiểm soát cái nhìn "tử tế" đó không?

+2

Dựa trên những gì tôi biết, một phần lý do điều này xảy ra là do cách bạn đặt thuộc tính Bố cục của biểu mẫu thắng của mình. Ví dụ: nếu 'AutoSize' được đặt thành' True', mọi thay đổi về độ phân giải màn hình sẽ ảnh hưởng đến kích thước biểu mẫu. Tương tự với 'Anchor' &' Dock', đó là lý do tại sao hầu hết mọi người thích WPF hơn Winforms. Nếu không thiết lập đúng tính chất này, từ màn hình 3840/2160 đến 1920/1080 bạn sẽ có được một "trừu tượng" (cố gắng để làm cho một trò đùa họa sĩ ở đây) winform. –

Trả lời

2

Có lẽ bạn nhận thức được điều này, nhưng nó đã không được đề cập trước đây:

Có 3 các loại ứng dụng:

  • Không nhận thức DPI
  • Hệ thống DPI awa tái
  • mỗi màn DPI biết

chi tiết ở đây: https://msdn.microsoft.com/de-de/library/windows/desktop/dn469266(v=vs.85).aspx

Bạn có thể thiết lập DPI-cao nhận thức về ứng dụng của bạn trong app.config:

<appSettings> 
    <add key="EnableWindowsFormsHighDpiAutoResizing" value="false" /> 
</appSettings> 

và app.manifest:

<application xmlns="urn:schemas-microsoft-com:asm.v3"> 
    <windowsSettings> 
    <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">false</dpiAware> 
    </windowsSettings> 
</application> 

Khi bạn có một DPI> = 150% tỉ lệ có thể kiểm soát thêm qua RMB vào ứng dụng -> Properties -> Compatibility -> Scaling trên DPI cao

Đối với Windows Forms mặc định là Sở KH & ĐT-Scaling vô hiệu hóa cho DPI cao. Vì vậy, tất cả mọi thứ shoud làm việc ra khỏi hộp.Có thể một trong các cài đặt này không được đặt mặc định? Đặc biệt là cấu hình trong các thuộc tính RMB trên exe?

3

Microsoft nhận thức được vấn đề này và cố định nó với Net 4.7 Framework:

https://blogs.msdn.microsoft.com/dotnet/2017/04/05/announcing-the-net-framework-4-7/

+0

Từ ghi chú phát hành 4.7: "Bản phát hành này bao gồm một tập hợp lớn các cải tiến DPI cao cho các ứng dụng Windows Forms DPI Aware". Nhưng ví dụ của tôi không phải là DPI Aware. Nó trông có vẻ khác nhau tùy thuộc vào màn hình giây. Tôi sẽ thử nghiệm nó với 4.7. – Manuel

+0

Tôi nghĩ rằng câu quan trọng nhất trong bản phát hành là Windows Forms dựa trên đồ họa raster, cá nhân tôi nghĩ rằng trong trường hợp của bạn, tỷ lệ 200% đang đóng một vai trò nặng nề tại sao ứng dụng thay đổi trong các màn hình khác nhau. Nhưng đó vẫn là một dự đoán. – Kris

Các vấn đề liên quan