[英]C# resizing window issue
我有一个问题。 当我最大化我的 window 时,其中的内容(标签/按钮)会损坏或相互重叠。 它仅在最大化和还原时发生。 我需要对我的 Resizecontrol 方法进行任何更改吗?
我不确定我的代码有什么问题 - 有什么建议吗?
附上我面临的问题。 [![面临的问题][1]][1]
using Common;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Common.Entities;
using System.Messaging;
using Entities;
using System.Timers;
using System.Threading;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Configuration;
using Newtonsoft.Json;
namespace Trafficlight
{
public partial class Form1 : Form
{
#region
private bool isFloor = false;
private bool isLane1 = false;
private bool isLane2 = false;
private bool isBay1 = false;
private bool isBay2 = false;
private bool isBay3 = false;
private bool isBay4 = false;
private bool isBay5 = false;
private bool isBay6 = false;
private bool isBay7 = false;
private bool isBay8 = false;
private bool isBay1_Flash = false;
private bool isBay2_Flash = false;
private bool isBay3_Flash = false;
private bool isBay4_Flash = false;
private bool isBay5_Flash = false;
private bool isBay6_Flash = false;
private bool isBay7_Flash = false;
private bool isBay8_Flash = false;
private bool isBay1_Red = false;
private bool isBay2_Red = false;
private bool isBay3_Red = false;
private bool isBay4_Red = false;
private bool isBay5_Red = false;
private bool isBay6_Red = false;
private bool isBay7_Red = false;
private bool isBay8_Red = false;
String ip, lane_ip, bay_ip;
System.Timers.Timer timer;
System.Timers.Timer timer_LaneA;
System.Timers.Timer timer_LaneB;
System.Timers.Timer timer_Bay;
System.Timers.Timer timer_Bay2;
Manual_TrafficLightController m = new Manual_TrafficLightController();
List<SystemTrafficLight> trafficlightList = new List<SystemTrafficLight>();
string errorMessage = string.Empty;
string floorL, laneL1, laneL2, bayL1, bayL2;
string callApi = ConfigurationSettings.AppSettings.Get("MTLControl");
private Rectangle button1OriginalRect;
private Rectangle button2OriginalRect;
private Rectangle button3OriginalRect;
private Rectangle button4OriginalRect;
private Rectangle button5OriginalRect;
private Rectangle button6OriginalRect;
private Rectangle button7OriginalRect;
private Rectangle button8OriginalRect;
private Rectangle button9OriginalRect;
private Rectangle button10OriginalRect;
private Rectangle button11OriginalRect;
private Rectangle button12OriginalRect;
private Rectangle button13OriginalRect;
private Rectangle button14OriginalRect;
private Rectangle button15OriginalRect;
private Rectangle button16OriginalRect;
private Rectangle button17OriginalRect;
private Rectangle button18OriginalRect;
private Rectangle button19OriginalRect;
private Rectangle button20OriginalRect;
private Rectangle button21OriginalRect;
private Rectangle button22OriginalRect;
private Rectangle button23OriginalRect;
private Rectangle button24OriginalRect;
private Rectangle button25OriginalRect;
private Rectangle button26OriginalRect;
private Rectangle button27OriginalRect;
private Rectangle button28OriginalRect;
private Rectangle button29OriginalRect;
private Rectangle button30OriginalRect;
private Rectangle label1OriginalRect;
private Rectangle label2OriginalRect;
private Rectangle label3OriginalRect;
private Size formOriginalSize;
#endregion
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
formOriginalSize = this.Size;
button1OriginalRect = new Rectangle(btnFloor1.Location.X, btnFloor1.Location.Y, btnFloor1.Width, btnFloor1.Height);
button2OriginalRect = new Rectangle(btnLane1.Location.X, btnLane1.Location.Y, btnLane1.Width, btnLane1.Height);
button3OriginalRect = new Rectangle(btnLane2.Location.X, btnLane2.Location.Y, btnLane2.Width, btnLane2.Height);
button4OriginalRect = new Rectangle(btnBay1.Location.X, btnBay1.Location.Y, btnBay1.Width, btnBay1.Height);
button5OriginalRect = new Rectangle(btnBay2.Location.X, btnBay2.Location.Y, btnBay2.Width, btnBay2.Height);
button6OriginalRect = new Rectangle(btnBay3.Location.X, btnBay3.Location.Y, btnBay3.Width, btnBay3.Height);
button7OriginalRect = new Rectangle(btnBay4.Location.X, btnBay4.Location.Y, btnBay4.Width, btnBay4.Height);
button8OriginalRect = new Rectangle(btnBay5.Location.X, btnBay5.Location.Y, btnBay5.Width, btnBay5.Height);
button9OriginalRect = new Rectangle(btnBay6.Location.X, btnBay6.Location.Y, btnBay6.Width, btnBay6.Height);
button10OriginalRect = new Rectangle(btnBay7.Location.X, btnBay7.Location.Y, btnBay7.Width, btnBay7.Height);
button11OriginalRect = new Rectangle(btnBay8.Location.X, btnBay8.Location.Y, btnBay8.Width, btnBay8.Height);
button12OriginalRect = new Rectangle(btnFloor_Green.Location.X, btnFloor_Green.Location.Y, btnFloor_Green.Width, btnFloor_Green.Height);
button13OriginalRect = new Rectangle(btnFloor_Wrong.Location.X, btnFloor_Wrong.Location.Y, btnFloor_Wrong.Width, btnFloor_Wrong.Height);
button14OriginalRect = new Rectangle(btnFloor_Reset.Location.X, btnFloor_Reset.Location.Y, btnFloor_Reset.Width, btnFloor_Reset.Height);
button15OriginalRect = new Rectangle(btnLane_Green.Location.X, btnLane_Green.Location.Y, btnLane_Green.Width, btnLane_Green.Height);
button16OriginalRect = new Rectangle(BtnLane_Wait.Location.X, BtnLane_Wait.Location.Y, BtnLane_Wait.Width, BtnLane_Wait.Height);
button17OriginalRect = new Rectangle(btnLane_Wrong.Location.X, btnLane_Wrong.Location.Y, btnLane_Wrong.Width, btnLane_Wrong.Height);
button18OriginalRect = new Rectangle(btnReset_Lane1.Location.X, btnReset_Lane1.Location.Y, btnReset_Lane1.Width, btnReset_Lane1.Height);
button19OriginalRect = new Rectangle(btnLane2_Green.Location.X, btnLane2_Green.Location.Y, btnLane2_Green.Width, btnLane2_Green.Height);
button20OriginalRect = new Rectangle(btnLane2_Wait.Location.X, btnLane2_Wait.Location.Y, btnLane2_Wait.Width, btnLane2_Wait.Height);
button21OriginalRect = new Rectangle(btnLane2_Wrong.Location.X, btnLane2_Wrong.Location.Y, btnLane2_Wrong.Width, btnLane2_Wrong.Height);
button22OriginalRect = new Rectangle(btnReset_Lane2.Location.X, btnReset_Lane2.Location.Y, btnReset_Lane2.Width, btnReset_Lane2.Height);
button23OriginalRect = new Rectangle(btnBay_FlashGreen.Location.X, btnBay_FlashGreen.Location.Y, btnBay_FlashGreen.Width, btnBay_FlashGreen.Height);
button24OriginalRect = new Rectangle(BtnBay_Green.Location.X, BtnBay_Green.Location.Y, BtnBay_Green.Width, BtnBay_Green.Height);
button25OriginalRect = new Rectangle(btnBay_Red.Location.X, btnBay_Red.Location.Y, btnBay_Red.Width, btnBay_Red.Height);
button26OriginalRect = new Rectangle(btnReset_BayL1.Location.X, btnReset_BayL1.Location.Y, btnReset_BayL1.Width, btnReset_BayL1.Height);
button27OriginalRect = new Rectangle(BtnBay2_FlashGreen.Location.X, BtnBay2_FlashGreen.Location.Y, BtnBay2_FlashGreen.Width, BtnBay2_FlashGreen.Height);
button28OriginalRect = new Rectangle(btnBay2_Green.Location.X, btnBay2_Green.Location.Y, btnBay2_Green.Width, btnBay2_Green.Height);
button29OriginalRect = new Rectangle(btnBay2_Red.Location.X, btnBay2_Red.Location.Y, btnBay2_Red.Width, btnBay2_Red.Height);
button30OriginalRect = new Rectangle(btnReset_BayL2.Location.X, btnReset_BayL2.Location.Y, btnReset_BayL2.Width, btnReset_BayL2.Height);
label1OriginalRect = new Rectangle(llbl_Level1.Location.X, llbl_Level1.Location.Y, llbl_Level1.Width, llbl_Level1.Height);
label2OriginalRect = new Rectangle(llbl_Level3.Location.X, llbl_Level3.Location.Y, llbl_Level3.Width, llbl_Level3.Height);
label3OriginalRect = new Rectangle(llbl_Level5.Location.X, llbl_Level5.Location.Y, llbl_Level5.Width, llbl_Level5.Height);
private void resizeChildrenControls()
{
resizeControl(button1OriginalRect, btnFloor1);
resizeControl(button2OriginalRect, btnLane1);
resizeControl(button3OriginalRect, btnLane2);
resizeControl(button4OriginalRect, btnBay1);
resizeControl(button5OriginalRect, btnBay2);
resizeControl(button6OriginalRect, btnBay3);
resizeControl(button7OriginalRect, btnBay4);
resizeControl(button8OriginalRect, btnBay5);
resizeControl(button9OriginalRect, btnBay6);
resizeControl(button10OriginalRect, btnBay7);
resizeControl(button11OriginalRect, btnBay8);
resizeControl(button12OriginalRect, btnFloor_Green);
resizeControl(button13OriginalRect, btnFloor_Wrong);
resizeControl(button14OriginalRect, btnFloor_Reset);
resizeControl(button15OriginalRect, btnLane_Green);
resizeControl(button16OriginalRect, BtnLane_Wait);
resizeControl(button17OriginalRect, btnLane_Wrong);
resizeControl(button18OriginalRect, btnReset_Lane1);
resizeControl(button19OriginalRect, btnLane2_Green);
resizeControl(button20OriginalRect, btnLane2_Wait);
resizeControl(button21OriginalRect, btnLane2_Wrong);
resizeControl(button22OriginalRect, btnReset_Lane2);
resizeControl(button23OriginalRect, btnBay_FlashGreen);
resizeControl(button24OriginalRect, BtnBay_Green);
resizeControl(button25OriginalRect, btnBay_Red);
resizeControl(button26OriginalRect, btnReset_BayL1);
resizeControl(button27OriginalRect, BtnBay2_FlashGreen);
resizeControl(button28OriginalRect, btnBay2_Green);
resizeControl(button29OriginalRect, btnBay2_Red);
resizeControl(button30OriginalRect, btnReset_BayL2);
resizeControl(label1OriginalRect, llbl_Level1);
resizeControl(label2OriginalRect, llbl_Level3);
resizeControl(label3OriginalRect, llbl_Level5);
}
private void resizeControl(Rectangle originalControlRect, Control control)
//{
//if (originalControlRect.X != 0)
{
float xRatio = (float)(Width) / (float)(formOriginalSize.Width);
float yRatio = (float)(Height) / (float)(formOriginalSize.Height);
int newX = (int)(originalControlRect.X * xRatio);
int newY = (int)(originalControlRect.Y * yRatio);
int newWidth = (int)(originalControlRect.Width * xRatio);
int newHeight = (int)(originalControlRect.Height * yRatio);
control.Location = new Point(newX, newY);
control.Size = new Size(newWidth, newHeight);
}
// }
private void Form1_Resize(object sender, EventArgs e)
{
resizeChildrenControls();
}
[1]: https://i.stack.imgur.com/1Rl57.png
根据 window 大小在表单上定位控件不是一个好主意。 尝试将控件放置在TableLayoutPanel中。 还可以利用Anchor 和 Dock属性。 请检查这个例子。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.