5

私のプロジェクトのコーディングはうまくいっていました。しかし、今日私は問題に気づきました。

私のメインノートブックはフルHD(1920x1080)の解像度で、ここでプロジェクトをコーディングしています。メインノートブックの解像度を1280x1024、1280x800、または1024x768に変更しても、問題はありません。私のアプリケーションの解像度は1024x768で、崩壊していません。これはプリントスクリーンです。

通常の画面

しかし、私の他のノートブックの解像度は1366x768です。そして、私はこのノートブックでアプリケーションを実行しています。おー!がっかりです。アプリケーション画面がずれました。これは悪いプリントスクリーンです。

画面が悪い

私はなぜなのか理解していない。このエラーを修正するにはどうすればよいですか?

4

5 に答える 5

8

これは、さまざまなDPI設定から発生します。これは、フォームロードで実行できます。

// Get DPI width
float x = this.CreateGraphics().DpiX;

// If screen is width
if (x == 120)
    // Get big image from Resources
    this.BackgroundImage = Properties.Resources.BigImage;
else
    // Get small image from Resources
    this.BackgroundImage = Properties.Resources.SmallImage;
于 2012-11-03T18:37:35.113 に答える
3

Windowsフォームフォームでも同じ問題が発生しました。フォームのAutoScaleMode設定をFontからDPIに変更し、FormBorderStylefor設定をFixedからSizableに変更するだけで済みました。これで、Windowsフォームフォームがデスクトップとラップトップに正しく表示されます。

于 2014-05-14T20:34:44.437 に答える
2

2つの画面のDPI設定が同じかどうかを確認できます。これを行うには、コントロールパネルまたは表示オプションを使用します(正確には思い出せません。目の前にWindows 7がありません)(HD対応ラップトップには120 DPIがあり、もう一方には標準96があります) )。

プログラムで、フォームのAutoScaleModeをに設定して、None再試行してください。

自動スケーリングフォームの処理方法を支援するリソースは次のとおり
です。Windowsフォームでの自動スケーリング

于 2012-11-01T21:19:28.020 に答える
1

ピクセルの問題を解決する直接的な解決策はありません。しかし、私たちは自分たちでそれを行うことができます。まず、フォームで使用可能なコントロールを見つけてから、サイズを変更する必要があります。

フォームのすべてのコントロールを識別し、アプリケーションのコントロールのリストを返すクラス「IdentifyControls.cs」を追加します。メニューバーから[プロジェクト]->[クラスの追加]を選択して、アプリケーションにクラスを追加できます。次に、次のように入力します

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace FallingFlowers // Falling Flowers is the name of my project
{
    public static class IdentifyControl
    {
        public static List<Control> findControls(Control c)
        {
            List<Control> list = new List<Control>();
            foreach (Control control in c.Controls)
                list.Add(control);
            return list;
        }
    }
}

次に、「demo.cs」などの別のクラスをアプリケーションに追加します。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
using System.IO;

namespace FallingFlowers // Falling Flowers is the name of my project
{
    public class demo
    {
        public static void relocate(Form fo, int ox, int oy)
        {
            List<Control> list = new List<Control>();
            list = IdentifyControl.findControls(fo);
            for (int i = 0; i < list.Count; i++)
                reposition(list[i], ox, oy);
        }

        public static void reposition(Control c, int ox, int oy)
        {
            int x, y;
            x = ((c.Location.X * Screen.PrimaryScreen.Bounds.Width) / ox);
            y = ((c.Location.Y * Screen.PrimaryScreen.Bounds.Height) / oy);
            c.Location = new Point(x, y);
            x = ((c.Width * Screen.PrimaryScreen.Bounds.Width) / ox);
            y = ((c.Height * Screen.PrimaryScreen.Bounds.Height) / oy);
            c.Width = x;
            c.Height = y;
            if (c is Label || c is Button)
                resizeText(c, ox, oy);
        }

        public static void resizeText(Control l, int ox, int oy)
        {
            float s;
            float txtsize = l.Font.Size;
            s = ((txtsize * Screen.PrimaryScreen.Bounds.Width) / ox)+1;
            l.Font = new Font(l.Font.Name, s,l.Font.Style);
        }

        public static void repositionForm(Form f, int ox, int oy)
        {
            int x, y;
            x = (f.Location.X * Screen.PrimaryScreen.Bounds.Width) / ox;
            y = (f.Location.Y * Screen.PrimaryScreen.Bounds.Width) / oy;
            f.Location = new Point(x, y);
        }
    }
}

このクラスには、コントロールの再配置、テキストのサイズ変更、およびフォームのサイズ変更を行うためのメソッドが含まれています。

フォームのloadイベントでこれらの関数を呼び出します。

フォーム内のすべてのコントロールを再配置するには

demo.relocate(this, 1366, 768);

ここで、1366と768は、アプリケーションが開発された元の解像度です。

フォームを再配置するには:

demo.repositionForm(this, 1366, 768);

1366および768は、アプリケーションが開発された元の解像度です。

あなたにとってはそうなるでしょうdemo.relocate(this, 1920, 1080);

これがお役に立てば幸いです:-)...

于 2014-04-06T10:01:30.357 に答える
0

画面設定のコードが問題の発見に大いに役立つことに同意します。

しかし、画面サイズを基準にした点ではなく、座標点を設定するように画像を設定しているようです。ディスプレイを常に見栄えよくするために、座標を画面サイズの比率にすることができます。

于 2012-11-01T21:18:19.903 に答える