Положение лейбла отличается в XP и 7 - PullRequest
1 голос
/ 25 февраля 2011

Я сделал небольшое приложение (winforms), чтобы показать счет в крикет (мир только начался, ура). Он отлично работает в xp, но в win 7 метка показывает несколько пикселей вниз по сравнению с его позицией в xp, что полностью разрушает все. (надеюсь, это было понятно)

вот exe: [УДАЛЕНО]

как это выглядит в XP; http://imgur.com/emcKG.jpg

как это выглядит в 7 (приблизительно): http://imgur.com/sdqry.jpg

также может ли кто-нибудь подтвердить, какой .net требует мое приложение? Я думаю, что это .net 2.0, так как целевая среда установлена ​​на .Net 2.0.

Спасибо

Редактировать: не будет публиковать exe в следующий раз. извиняюсь!

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Net;
using System.Xml;
using System.Runtime.InteropServices;
using Microsoft.Win32;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {

        int numberOfMatches = 0;
        int selectedmatch = 0;
        string[,] data;

        string fileToParse = Path.GetTempPath() + "cricketfile.xml";
        int matchToShow = 0;
        public const int WM_NCLBUTTONDOWN = 0xA1;
        public const int HT_CAPTION = 0x2;

        [DllImportAttribute("user32.dll")]
        public static extern int SendMessage(IntPtr hWnd,
                         int Msg, int wParam, int lParam);
        [DllImportAttribute("user32.dll")]
        public static extern bool ReleaseCapture();

        RegistryKey rkApp = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);

        public Form1()
        {

            InitializeComponent();

            int X = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width / 2 - this.Width / 2;
            this.Location = new System.Drawing.Point(X, -5);


            if (rkApp.GetValue("cricketscore") == null)
            {
                startWithWindowsToolStripMenuItem.Checked = false ;
            }
            else
            {
                startWithWindowsToolStripMenuItem.Checked = true ;
            }
            this.Region = new Region(new Rectangle(10, 10, 197, 17));
            ToolTip tooltip = new ToolTip();
            tooltip.SetToolTip(pictureBox1, " right click for settings, left click to move");
            tooltip.SetToolTip(label1, " right click for settings, left click to move");
            fetchData();
            addContextEntries();
            chooseIndia();
            updateScore();

           // MessageBox.Show(data.GetLength(0).ToString());


            //foreach (string s in data)
            //{
            //    Console.WriteLine(s);
            //}

            timer1.Interval = 10 * 1000;
            timer1.Enabled = true;

        }
        public void addContextEntries()
        {
           // MessageBox.Show("num- " + numberOfMatches);
            List<ToolStripMenuItem> Mylist1 = new List<ToolStripMenuItem>();
            for (int i = 0; i < numberOfMatches; i++)
            {
                Mylist1.Add( new ToolStripMenuItem() );
                this.contextMenuStrip1.Items.Add(Mylist1[i]);
                Mylist1[i].Text = "See Match " + (i + 1) + "'s score";
                switch(i) 
                {
                    case 0:
                        Mylist1[i].Click += new System.EventHandler(this.match1);
                        break;
                    case 1:
                        Mylist1[i].Click += new System.EventHandler(this.match2);
                        break;
                    case 2:
                        Mylist1[i].Click += new System.EventHandler(this.match3);
                        break;
                    case 3:
                        Mylist1[i].Click += new System.EventHandler(this.match4);
                        break;
                    case 4:
                        Mylist1[i].Click += new System.EventHandler(this.match5);
                        break;
                }

            }

        }
        public void match1(object sender, EventArgs e)
        {
           // MessageBox.Show("match 1");
            matchToShow = 0;
            label1.Text = data[0, 0] + " " + data[0, 1];


        }
        public void match2(object sender, EventArgs e)
        {
          //  MessageBox.Show("match 2");
            matchToShow = 1;
            label1.Text = data[1, 0] + " " + data[1, 1];

        }
        public void match3(object sender, EventArgs e)
        {
            matchToShow = 2;
            label1.Text = data[2, 0] + " " + data[2, 1];

        }
        public void match4(object sender, EventArgs e)
        {
            matchToShow = 3;
            label1.Text = data[3, 0] + " " + data[3, 1];

        }
        public void match5(object sender, EventArgs e)
        {
            matchToShow = 4;
            label1.Text = data[4, 0] + " " + data[4, 1];

        }

        public void chooseIndia()
        {
            for (int i = 0; i < data.GetLength(0); i++)
            {
                // MessageBox.Show("i - " + i);
                if (data[i, 3].ToLower().Contains("australia"))
                {
                    matchToShow = i;
                    // MessageBox.Show("i - " + i);
                    break;
                }
            }
        }
        public void updateScore()
        {
            fetchData();
            //foreach (string s in data)
            //{
            //    Console.WriteLine(s);
            //}
            // MessageBox.Show("matchToShow- " + matchToShow);
            label1.Text = data[matchToShow,0] + " " + data[matchToShow ,1];
        }

        public void fetchData()
        {
            int matchnumber = -1;
            numberOfMatches = 0;
            WebClient Client = new WebClient();
            try
            {
                Client.DownloadFile("http://synd.cricbuzz.com/score-gadget/gadget-scores-feed.xml", fileToParse);
            }
            catch ( WebException we)
            {
                if (we.ToString().ToLower().Contains("connect to"))
                    ;//MessageBox.Show("unable to connect to server") ;
            }
            XmlTextReader xmlreader0 = new XmlTextReader(fileToParse);
            while (xmlreader0.Read())
            {
                if (xmlreader0.Name.ToString() == "match" && xmlreader0.NodeType == XmlNodeType.Element)
                {
                    ++numberOfMatches;
                }
            }
            data = new string[numberOfMatches, 4];
           // numberOfMatches = 0;
            // MessageBox.Show("matchnumbers - " + numberOfMatches);

            XmlTextReader xmlreader = new XmlTextReader(fileToParse);
            while (xmlreader.Read())
            {
                if (xmlreader.Name.ToString() == "header" && xmlreader.NodeType == XmlNodeType.Element)
                {
                    xmlreader.Read();

                    data[matchnumber, 0] = xmlreader.Value;
                    //  MessageBox.Show(xmlreader.Value);
                }


                if (xmlreader.Name == "description" && xmlreader.NodeType == XmlNodeType.Element)
                {
                    //  MessageBox.Show(xmlreader.Value);
                    xmlreader.Read();
                    //  MessageBox.Show("matched - " + xmlreader.Value);
                    data[matchnumber, 1] = xmlreader.Value;
                }

                if (xmlreader.Name == "url-text" && xmlreader.NodeType == XmlNodeType.Element)
                {
                    xmlreader.Read();
                    // MessageBox.Show(xmlreader.Value);
                    data[matchnumber, 2] = xmlreader.Value;
                }

                if (xmlreader.Name == "url-link" && xmlreader.NodeType == XmlNodeType.Element)
                {
                    xmlreader.Read();
                    data[matchnumber, 3] = xmlreader.Value;
                }

                if (xmlreader.Name.ToString() == "match" && xmlreader.NodeType == XmlNodeType.Element)
                {
                    matchnumber++;
                }

            }
            xmlreader.Close();
            xmlreader0.Close();

        }
        private void timer1_Tick(object sender, EventArgs e)
        {
            updateScore();
        }

        private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                ReleaseCapture();
                SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
            }
        }

        private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                ReleaseCapture();
                SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
            }
        }

        private void exitToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void switchColrosToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if ( label1.ForeColor == System.Drawing.Color.Black)
                label1.ForeColor = System.Drawing.Color.White ;
            else
                label1.ForeColor = System.Drawing.Color.Black; 
        }

        private void startWithWindowsToolStripMenuItem_Click(object sender, EventArgs e)
        {

        }

        private void startWithWindowsToolStripMenuItem_CheckStateChanged(object sender, EventArgs e)
        {
            if (startWithWindowsToolStripMenuItem.Checked == true)
            {
                rkApp.SetValue("cricketscore", Application.ExecutablePath.ToString());
            }
            else
            {
                rkApp.DeleteValue("cricketscore", false);
            }
        }

        private void showFullScorecardToolStripMenuItem_Click(object sender, EventArgs e)
        {
            System.Diagnostics.Process.Start(data[matchToShow, 3]);
        }

        private void label1_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                ReleaseCapture();
                SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
            }
        }

        //public void findNumberOfMatches()
        //{
        //    if (xmlreader.Name.ToString() == "match" && xmlreader.NodeType == XmlNodeType.Element)
        //    {
        //        matchnumber++;
        //    }
        //}
    }
}

кстати, как мне пройти проверку, чтобы нормальные люди могли пользоваться ею без страха? virustotal.com?

Редактировать: упс, я был не прав, это не просто ярлык. поле для фотографий слева от ярлыка также было смещено на несколько пикселей вниз.

Ответы [ 3 ]

2 голосов
/ 25 февраля 2011

Из ваших снимков экрана видно, что весь блок с текстом сокращается, и есть синяя полоса, которая покрывает часть надписи.

Возможно, это проблема с разрешением или разрешением точек на дюйм.также они меняют цвет с одной ОС на другую ??

Возможно, вам понадобится установить местоположения и другие свойства в коде со статическими, жестко закодированными значениями, а не позволять окнам размещать его в представлении конструктора или использовать некоторое переменное число в зависимости от размера экрана

это в c # .net должно быть похоже

        label1.Left = 10;
        label1.Top = 10;
2 голосов
/ 25 февраля 2011
        this.Region = new Region(new Rectangle(10, 10, 197, 17));

Удалить это.Это делает ваше окно слишком маленьким на машине с более высокой настройкой видео точек на дюйм.Довольно часто встречается на Win7.При более высоком DPI шрифты увеличиваются в пикселях.Свойство Form.AutoScaleMode автоматически подстраивается под это, увеличивая элементы управления, чтобы соответствовать этому большему шрифту.Тем не менее, ваш регион не растет, отсекая нижние элементы управления.Понятия не имею, почему вы используете Region в первую очередь, поскольку он представляет собой простой прямоугольник, я полагаю, вы ищете FormBorderStyle = None.Форма не позволит вам сделать ее слишком маленькой, но вы можете переопределить ее в методе OnLoad.Установите ClientSize достаточно большим, чтобы соответствовать масштабированным элементам управления.

1 голос
/ 25 февраля 2011
...