如何将foreach循环与列表框一起使用?

玻璃杯

知名会员
已加入
2019年11月22日
留言内容
126
编程经验
Beginner
我的想法是这样的:

C#:
foreach (var HistoryItem in lstbHistory)

但这似乎是错误的,因为"lstbHistory"部分带红色下划线。我该怎么做呢?

谢谢
 

跳伞者

工作人员
已加入
2019年4月6日
留言内容
2,605
地点
弗吉尼亚州切萨皮克
编程经验
10+
When you hover over the lstHistory with the red squiggly lines, what is the error shown?

只是猜测,您很可能正在尝试访问其范围之外的内容。

我假设这个线程是您在您所指的新线程 其他职位。如果是这样,那么通常这是一个范围界定问题。权宜之计是让这两种形式相互引用,并将各种控件公开。这种权宜的解决方案违反了现代编程原则-在这种情况下,是松散耦合和适当的封装。由于RAM和CPU数量的限制,这可能是最有效的处理方式,因此您可能早在80年代和90年代就已经放弃了这一点,但是由于这不再是一个限制因素,您应该努力编写更多内容遵循现代OOP原则的可维护代码。
 
Last edited:

玻璃杯

知名会员
已加入
2019年11月22日
留言内容
126
编程经验
Beginner
您好,我有两种形式,每种形式都有一个控件,分别是一个文本框和一个列表框。

我的主窗体包含文本框,第二个窗体是“历史记录”窗体,其中包含列表框(“历史记录”列表框)。来自Form1文本框中的文本通过AddToHistory(string)添加到Form2中的列表框中。我应该在哪里创建此方法?在我的第二个表单cs文件中,看不到第一个表单cs文件中的文本框,反之亦然,form1的cs文件中的文本框看不到另一个表单中的列表框。

我究竟做错了什么?
谢谢
 

玻璃杯

知名会员
已加入
2019年11月22日
留言内容
126
编程经验
Beginner
谢谢,你能告诉我如何"让两种形式互相引用"?

这不是我提到创建的帖子,当我撰写此帖子时,我不知道这是一个范围问题,因此也许我做了一个冗余线程,如果可以的话,我将其删除。
 

跳伞者

工作人员
已加入
2019年4月6日
留言内容
2,605
地点
弗吉尼亚州切萨皮克
编程经验
10+
Anyway, to answer the easy part of the problem, assuming you have access the 历史, you would iterate over the 项目 collection.
 

玻璃杯

知名会员
已加入
2019年11月22日
留言内容
126
编程经验
Beginner
谢谢 for that it's good to know but I changed the way I was doing it to this:

C#:
if (lstbHistory.FindString(txtInput.Text) == ListBox.NoMatches)

因此,仅当文本不存在时才运行代码。
 

跳伞者

工作人员
已加入
2019年4月6日
留言内容
2,605
地点
弗吉尼亚州切萨皮克
编程经验
10+

跳伞者

工作人员
已加入
2019年4月6日
留言内容
2,605
地点
弗吉尼亚州切萨皮克
编程经验
10+
C#:
if (lstbHistory.FindString(txtInput.Text) == ListBox.NoMatches)

因此,仅当文本不存在时才运行代码。
las,那会发现"Thanksgiving"当您搜寻"Thanks"。可能不是您想发生的事情。
 

玻璃杯

知名会员
已加入
2019年11月22日
留言内容
126
编程经验
Beginner
las,那会发现"Thanksgiving"当您搜寻"Thanks"。可能不是您想发生的事情。

该死,我使用foreach循环的原始计划会奏效吗?

另外,你能告诉我"{ get; set; }"以下代码的一部分意味着好吗?

C#:
public class NameUpdatedEventArgs : EventArgs
{
    public string Name { get; set; }
}
 

玻璃杯

知名会员
已加入
2019年11月22日
留言内容
126
编程经验
Beginner
因此,我了解我需要做什么以及大致如何去做。这是我的情况,Form1有一个TextBox,Form2有一个ListBox,TextBox在更新时将发送引发事件,并且ListBox将以文本作为新项进行更新。那就是我想要达到的目标。

因此,我首先需要制作一个包含如下字符串属性的EventArgs:

C#:
public class TextBoxUpdatedEventArgs : EventArgs
{
    public string NewText { get; set; }
}

所以我现在的问题是,这将去哪儿?我的猜测将是"公共局部类Form1:表单" block?
 

羊皮

退休程序员
已加入
2018年9月5日
留言内容
1,982
地点
英国
编程经验
10+
请不要在主题上提出新问题。这使人们感到困惑,并使您更难理解已解决的问题。

相反,请为新问题打开一个新主题。
 

玻璃杯

知名会员
已加入
2019年11月22日
留言内容
126
编程经验
Beginner
请不要在主题上提出新问题。这使人们感到困惑,并使您更难理解已解决的问题。

相反,请为新问题打开一个新主题。

我不介意为每个步骤都启动一个新线程,但是我认为这会让每个人感到烦恼,我认为该线程已经成为有关自定义事件arg及其实现的话题,我可能需要整个过程的建议。在我看来,最好将一个线程放在一起,但是如果您希望将其分开,我会做到这一点。

编辑:为了消除任何混乱,我目前唯一的问题是:
1)如第1篇所述,foreach循环能否避免第10篇中描述的问题?
2)考虑到帖子#13中描述的情况,我应该在哪里声明TextBoxUpdatedEventArgs?
 
Last edited:

羊皮

退休程序员
已加入
2018年9月5日
留言内容
1,982
地点
英国
编程经验
10+
那么,对于所有人来说,将所有内容放在一起或放在一个地方并不是最好的选择,这就是为什么我要请您分开处理各自无关的问题。如果您遇到的问题之一与开始时遇到的主题问题有关,请务必仅针对该问题更新主题。但是当您问其他类似事后的事情时 13,那么这将成为另一个与您开始时所涉及的问题无关的问题。一般而言,主持人无论如何都会在进行此类操作时拆分您的主题,因此您最好不要执行与我刚刚问过的相反的事情来增加他们已经很忙的职责,因为我会标记该主题以供mods拆分主题一分为二。

Form1具有一个TextBox,Form2具有一个ListBox,该TextBox在更新时将发送引发事件,并且该ListBox将以文本作为新项进行更新。那就是我想要达到的目标。

您是否已阅读已获得的链接?
您是否还在MSDN中搜索了有关您要做什么的文档?
但这似乎是错误的,因为"lstbHistory"部分带红色下划线。我该怎么做呢?
那可能是因为它属于另一种形式,而不是您尝试从中访问的形式,但我只是在总结一下。您应该知道为什么用红色花体标记了它。
 

跳伞者

工作人员
已加入
2019年4月6日
留言内容
2,605
地点
弗吉尼亚州切萨皮克
编程经验
10+
Stop and read the documentation instead of relying on Intellisense. If you did read the documentation for the list box, you would find that there are both FindString() and FindStringExact(). The latter would fix your issue from post #10.
 
最佳 底部