Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何保留int变量的旧值编号,并根据行数更改form1大小?_C#_Winforms - Fatal编程技术网

C# 如何保留int变量的旧值编号,并根据行数更改form1大小?

C# 如何保留int变量的旧值编号,并根据行数更改form1大小?,c#,winforms,C#,Winforms,这是我的工作代码: 表格1顶部的第一个: int firsttime; private const int ROW_SIZE = 22; private int NumberOfRows; Image ima; private System.Timers.Timer _refreshTimer; private int _thisProcess; int firsttime; private const int ROW_SIZE = 22; private int NumberOfRows;

这是我的工作代码:

表格1顶部的第一个:

int firsttime;
private const int ROW_SIZE = 22;
private int NumberOfRows;
Image ima;
private System.Timers.Timer _refreshTimer;
private int _thisProcess;
int firsttime;
private const int ROW_SIZE = 22;
private int NumberOfRows;
Image ima;
private System.Timers.Timer _refreshTimer;
private int _thisProcess;
然后在构造函数中:

firsttime = 0;
dataGridView1.BackgroundColor = System.Drawing.Color.White;
dataGridView1.Columns["Column2"].DefaultCellStyle.BackColor = System.Drawing.Color.LightGoldenrodYellow;
dataGridView1.Columns["Column3"].DefaultCellStyle.BackColor = System.Drawing.Color.LightGoldenrodYellow;
dataGridView1.AllowUserToAddRows = false;
firsttime = 0;
dataGridView1.BackgroundColor = System.Drawing.Color.White;
dataGridView1.Columns["Column2"].DefaultCellStyle.BackColor = System.Drawing.Color.LightGoldenrodYellow;
dataGridView1.Columns["Column3"].DefaultCellStyle.BackColor = System.Drawing.Color.LightGoldenrodYellow;
dataGridView1.AllowUserToAddRows = false;
In the form1 load event:

private void Form1_Load(object sender, EventArgs e)
        {
            _thisProcess = Process.GetCurrentProcess().Id;
            InitializeRefreshTimer();
            PopulateApplications();
        }
在form1加载事件中:

private void Form1_Load(object sender, EventArgs e)
        {
            _thisProcess = Process.GetCurrentProcess().Id;
            InitializeRefreshTimer();
            PopulateApplications();
        }
然后,我使用timer init方法更新进程列表和dataGridView1

void InitializeRefreshTimer()
        {
            _refreshTimer = new System.Timers.Timer(5000);
            _refreshTimer.SynchronizingObject = this;
            _refreshTimer.Elapsed += new System.Timers.ElapsedEventHandler(TimerToUpdate_Elapsed);
            _refreshTimer.Start();
        }
void InitializeRefreshTimer()
        {
            _refreshTimer = new System.Timers.Timer(5000);
            _refreshTimer.SynchronizingObject = this;
            _refreshTimer.Elapsed += new System.Timers.ElapsedEventHandler(TimerToUpdate_Elapsed);
            _refreshTimer.Start();
        }
计时器已过事件:

void TimerToUpdate_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            PopulateApplications();
        }
void TimerToUpdate_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            PopulateApplications();
        }
PopulateApplication方法:

void PopulateApplications()
        {
            dataGridView1.Rows.Clear();            
            foreach (Process p in Process.GetProcesses())
            {
                if (p.MainWindowTitle.Length > 1)
                {
                    var icon = Icon.ExtractAssociatedIcon(p.MainModule.FileName);
                    ima = icon.ToBitmap();
                    ima = resizeImage(ima, new Size(25, 25));
                    ima.Save(@"c:\temp\ima.jpg");
                    String status = p.Responding ? "Running" : "Not Responding";
                    dataGridView1.Rows.Add(ima,p.ProcessName, status);
                }
            }
            firsttime += 1;
            if (firsttime == 1)
            {
                NumberOfRows = dataGridView1.Rows.Count;
            }
            if (NumberOfRows != dataGridView1.Rows.Count)
            {
                int diff = dataGridView1.Rows.Count - NumberOfRows;
                this.Height = this.Height + (ROW_SIZE * diff);
                NumberOfRows = dataGridView1.Rows.Count;
            }

        }
void PopulateApplications()
        {
            dataGridView1.Rows.Clear();            
            foreach (Process p in Process.GetProcesses())
            {
                if (p.MainWindowTitle.Length > 1)
                {
                    var icon = Icon.ExtractAssociatedIcon(p.MainModule.FileName);
                    ima = icon.ToBitmap();
                    ima = resizeImage(ima, new Size(25, 25));
                    ima.Save(@"c:\temp\ima.jpg");
                    String status = p.Responding ? "Running" : "Not Responding";
                    dataGridView1.Rows.Add(ima,p.ProcessName, status);
                }
            }
            firsttime += 1;
            if (firsttime == 1)
            {
                NumberOfRows = dataGridView1.Rows.Count;
            }
            if (NumberOfRows != dataGridView1.Rows.Count)
            {
                int diff = dataGridView1.Rows.Count - NumberOfRows;
                this.Height = this.Height + (ROW_SIZE * diff);
                NumberOfRows = dataGridView1.Rows.Count;
            }

        }
调整图像大小的方法:

public static Image resizeImage(Image imgToResize, Size size)
        {
            return (Image)(new Bitmap(imgToResize, size));
        }
public static Image resizeImage(Image imgToResize, Size size)
        {
            return (Image)(new Bitmap(imgToResize, size));
        }
在form1设计器中,我添加了dataGridView1,其中包含9列,仅用于测试。 在designer中,form1的大小是:652358 dataGridView1的大小是:624479

现在,每次添加新行时,form1高度自动调整大小为+=22。 如果删除一行,这意味着如果我关闭任何应用程序/进程,它将自动更新dataGridView1并删除一行,form1也将自动调整大小

用程序油漆检查过了。打开它几次,关闭几次,它就工作了。

编辑:

我用下面的代码替换了我原来的答案,因为它更好。您不需要同时使用
lastValue
currentValue
变量。相反,我使用了一个名为
NumberOfRows
的变量。我还添加了两个常量
ROW\u SIZE
(添加到每行表单高度的量)和
BaseFormHeight
(没有行时表单的高度)

Load
事件处理程序中,您应该记录表单的初始高度和初始行数

private void Form1_Load(object sender, EventArgs e)
{
    NumberOfRows = dataGridView1.Rows.Count;
    BaseFormHeight = this.Height - (NumberOfRows * ROW_SIZE);

    PopulateApplications();
}

这是我的工作代码:

表格1顶部的第一个:

int firsttime;
private const int ROW_SIZE = 22;
private int NumberOfRows;
Image ima;
private System.Timers.Timer _refreshTimer;
private int _thisProcess;
int firsttime;
private const int ROW_SIZE = 22;
private int NumberOfRows;
Image ima;
private System.Timers.Timer _refreshTimer;
private int _thisProcess;
然后在构造函数中:

firsttime = 0;
dataGridView1.BackgroundColor = System.Drawing.Color.White;
dataGridView1.Columns["Column2"].DefaultCellStyle.BackColor = System.Drawing.Color.LightGoldenrodYellow;
dataGridView1.Columns["Column3"].DefaultCellStyle.BackColor = System.Drawing.Color.LightGoldenrodYellow;
dataGridView1.AllowUserToAddRows = false;
firsttime = 0;
dataGridView1.BackgroundColor = System.Drawing.Color.White;
dataGridView1.Columns["Column2"].DefaultCellStyle.BackColor = System.Drawing.Color.LightGoldenrodYellow;
dataGridView1.Columns["Column3"].DefaultCellStyle.BackColor = System.Drawing.Color.LightGoldenrodYellow;
dataGridView1.AllowUserToAddRows = false;
In the form1 load event:

private void Form1_Load(object sender, EventArgs e)
        {
            _thisProcess = Process.GetCurrentProcess().Id;
            InitializeRefreshTimer();
            PopulateApplications();
        }
然后,我使用timer init方法更新进程列表和dataGridView1

void InitializeRefreshTimer()
        {
            _refreshTimer = new System.Timers.Timer(5000);
            _refreshTimer.SynchronizingObject = this;
            _refreshTimer.Elapsed += new System.Timers.ElapsedEventHandler(TimerToUpdate_Elapsed);
            _refreshTimer.Start();
        }
void InitializeRefreshTimer()
        {
            _refreshTimer = new System.Timers.Timer(5000);
            _refreshTimer.SynchronizingObject = this;
            _refreshTimer.Elapsed += new System.Timers.ElapsedEventHandler(TimerToUpdate_Elapsed);
            _refreshTimer.Start();
        }
计时器已过事件:

void TimerToUpdate_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            PopulateApplications();
        }
void TimerToUpdate_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            PopulateApplications();
        }
PopulateApplication方法:

void PopulateApplications()
        {
            dataGridView1.Rows.Clear();            
            foreach (Process p in Process.GetProcesses())
            {
                if (p.MainWindowTitle.Length > 1)
                {
                    var icon = Icon.ExtractAssociatedIcon(p.MainModule.FileName);
                    ima = icon.ToBitmap();
                    ima = resizeImage(ima, new Size(25, 25));
                    ima.Save(@"c:\temp\ima.jpg");
                    String status = p.Responding ? "Running" : "Not Responding";
                    dataGridView1.Rows.Add(ima,p.ProcessName, status);
                }
            }
            firsttime += 1;
            if (firsttime == 1)
            {
                NumberOfRows = dataGridView1.Rows.Count;
            }
            if (NumberOfRows != dataGridView1.Rows.Count)
            {
                int diff = dataGridView1.Rows.Count - NumberOfRows;
                this.Height = this.Height + (ROW_SIZE * diff);
                NumberOfRows = dataGridView1.Rows.Count;
            }

        }
void PopulateApplications()
        {
            dataGridView1.Rows.Clear();            
            foreach (Process p in Process.GetProcesses())
            {
                if (p.MainWindowTitle.Length > 1)
                {
                    var icon = Icon.ExtractAssociatedIcon(p.MainModule.FileName);
                    ima = icon.ToBitmap();
                    ima = resizeImage(ima, new Size(25, 25));
                    ima.Save(@"c:\temp\ima.jpg");
                    String status = p.Responding ? "Running" : "Not Responding";
                    dataGridView1.Rows.Add(ima,p.ProcessName, status);
                }
            }
            firsttime += 1;
            if (firsttime == 1)
            {
                NumberOfRows = dataGridView1.Rows.Count;
            }
            if (NumberOfRows != dataGridView1.Rows.Count)
            {
                int diff = dataGridView1.Rows.Count - NumberOfRows;
                this.Height = this.Height + (ROW_SIZE * diff);
                NumberOfRows = dataGridView1.Rows.Count;
            }

        }
调整图像大小的方法:

public static Image resizeImage(Image imgToResize, Size size)
        {
            return (Image)(new Bitmap(imgToResize, size));
        }
public static Image resizeImage(Image imgToResize, Size size)
        {
            return (Image)(new Bitmap(imgToResize, size));
        }
在form1设计器中,我添加了dataGridView1,其中包含9列,仅用于测试。在设计器中,form1大小为:652358,dataGridView1大小为:624479

现在,每次添加新行时,form1高度自动调整大小为+=22。如果删除一行,这意味着如果我关闭任何应用程序/进程,它将自动更新dataGridView1并删除一行,form1也将自动调整大小


用程序油漆检查过了。打开它关闭它几次,它就工作了。

使用另一个变量?新值
intold=-1如果(old=-1){old=i;}
或类似的东西,请记住
int
变量不会给您
Length
属性。您必须将其转换为字符串。re:使用另一个变量?是的,这个变量的作用域比你执行的代码要高。编辑了我的问题,我不确定我做的是否正确。因为我想根据每个itertion删除或添加的行数更改form1的大小。如果在第二个itertion中添加了更多新的5行,然后在下一个itertion中删除了3行,那么首先添加5行,然后删除3行。并始终删除已添加的最后一个。Ben第一次更新最后一个值时,我在哪里更新?抱歉?如果我现在按原样使用代码,它将首先输入If语句,currentValue为9,lastValue为0,这样它将执行22*9,并调整表单大小。@user3681442我想象您将
lastValue
currentValue
存储为私有类变量。事实上,
currentValue
作为局部变量会更好。我试图保持我的代码与您的问题相似,以便您可以看到更改的位置,但它组织得不是很好,因此我将对其进行编辑以使其更好。Ben现在的问题是第一个itertion/loop行。计数为9,NumberOfTows为-1。它输入if,然后它做22*9,也就是198。在原版中,form1尺寸高度为358。开头的原始大小应保持原样,然后仅根据添加或删除的行来调整大小。行中的Ben:if(NumberOfRows!=dataGridView1.rows.Count)在第一次循环/itertion后有9行,NumberOfRows为0。最后,表格的高度变为546。我做了你改变的一切。但是它在第一个循环中没有保持表单的原始大小,因为有9行,numberofrows为0。它们不一样,所以它正在输入表单并调整表单大小。@user3681442您需要理解我建议的概念,并将其应用于您的情况。这是你的工作,因为我看不到你的代码,我不得不做很多猜测。为什么在第一次调用PopulateApplication之前,dataGrid中有9行?这9排是从哪里来的?是否有其他添加行的方法?此外,请确保已正确注册加载事件。