开发者

Label's position is different in xp and 7

开发者 https://www.devze.com 2023-02-13 17:07 出处:网络
I made small application(winforms) to show the cricket score (the world has just started , yay). It works fine in xp, but in win 7 the label shows a few pixels down in position as compared to its posi

I made small application(winforms) to show the cricket score (the world has just started , yay). It works fine in xp, but in win 7 the label shows a few pixels down in position as compared to its position in xp, which totally ruins everything. ( i hope that was clear )

here is the exe: [REDACTED]

how it looks in xp; http://imgur.com/emcKG.jpg

how it looks in 7(approx): http://imgur.com/sdqry.jpg

also can someone confirm which .net my app requires ? I think its .net 2.0, since the target framework is set to .Net 2.0 .

Thanks

Edit: won't post the exe next time. sorry!

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);
            }
      开发者_JS百科  }

        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++;
        //    }
        //}
    }
}

btw how do I get by exe verified , so that normal people can use it without fear ? virustotal.com ?

Edit: oops , I was wrong ,tis not just the label. the picturebox to the left of the label has also been shifted down a few pixels.


It appears, from your screenshots, that the entire box that holds the text shrinks, and there's a blue bar that covers part of the label.

Perhaps it is a resolution issue or dpi issue. also they change color from one OS to the other??

You might need to set the locations and other properties in the code with a static ,hard coded values, rather than letting windows place it from the designer view or using some variable number based on the size of the screen

this is in c#.net should be similar

        label1.Left = 10;
        label1.Top = 10;


        this.Region = new Region(new Rectangle(10, 10, 197, 17));

Delete that. It makes your window too small on a machine with a higher video dots-per-inch setting. Quite common on Win7. A higher DPI makes the fonts taller in pixels. The Form.AutoScaleMode property automatically adjusts for that by making the controls larger to fit that bigger font. Your Region doesn't grow though, cutting off the bottom of the controls. No idea why you use a Region in the first place since its a plain rectangle, I suppose you are looking for FormBorderStyle = None. A form won't allow you to make it too small but you can override that in the OnLoad method. Set the ClientSize large enough to fit the rescaled controls.


This has to do with a difference in the DPI settings on Windows XP and Windows 7.

How to change DPI on Windows 7.
How to change DPI on Windows XP.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号