我正在创建一个包含用户插入的ListBox
整数的系统。我已经包含一个搜索按钮和一个搜索TextBox
,供用户输入他们想要在ListBox
内搜索的整数。一旦用户输入了整数,我想要显示一个消息框,要么通知用户存在例如1个整数值' 3'在列表框中,或错误消息框通知用户列表框中不存在整数。
private void buttonSearch_Click(object sender, EventArgs e)
{
listBoxAddedIntegers.SelectedItems.Clear();
for (int i = listBoxAddedIntegers.Items.Count - 1;i>=0; i--) ;
{
if (listBoxAddedIntegers.Items[i].ToString().ToLower().Contains(textBoxSearch.Text.ToLower())) ;
{
listBoxAddedIntegers.SetSelected(i, true);
}
}
// ...
}
我不太确定我要包含在这里的代码,而且我已插入的代码表明' i'在当前内容中不存在。
有人可以帮忙吗?
答案 0 :(得分:1)
我已插入的代码表明' i'在当前内容中不存在
评论中已经提到了@FrankM。在;
- 循环后,您有for
个跟踪。
for (int i = listBoxAddedIntegers.Items.Count - 1;i>=0; i--) ;
这会阻止for
- 循环在{ ... }
内执行您的代码。这可以转录为
for (int i = listBoxAddedIntegers.Items.Count - 1;i>=0; i--)
{
// Do nothing.
}
{
// now your code
}
这也意味着最后一个花括号内的代码将在其自己的范围内,因此以下代码将无法使用您定义的所有变量。
回答您的实际问题:
正如您已经选择匹配的项目一样。您可以通过计数计数器来扩展此循环。稍后用MessageBox
显示结果。
使用以下代码片段
listBoxAddedIntegers.Items[i].ToString().ToLower().Contains(textBoxSearch.Text.ToLower()))
您目前正在检查列表中的项目是否包含输入的TextBox.Text
因此,如果用户已在ListBox
中输入 3,4,5,...,13,23 并搜索 3 。他将获得3场比赛。如果您只想要1个匹配,则应使用String.Equals()
。我使用StringComparison.InvariantCultureIgnoreCase
来避免调用ToLower()
。
private void buttonSearch_Click(object sender, EventArgs e)
{
var counter = 0;
for (int i = 0; i < this.listBoxAddedIntegers.Items.Count; i++)
{
var item = this.listBoxAddedIntegers.Items[i];
if (string.Equals(item.ToString(), this.textBoxSearch.Text, StringComparison.InvariantCultureIgnoreCase))
{
this.listBoxAddedIntegers.SelectedItems.Add(item);
counter++;
}
}
if (counter == 0)
{
MessageBox.Show($"No matches for \"{this.textBoxSearch.Text}\" found!", "Search Results",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else
{
MessageBox.Show($"{counter} items found for \"{this.textBoxSearch.Text}\"!", "Search Results",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
提示:
自C#6起,您可以使用string interpolation代替String.Format()或字符串连接(+)。
答案 1 :(得分:0)
{-# LANGUAGE OverloadedStrings #-}
module Datetimetest where
import Data.Time.Format
import Data.Time.Calendar
import Data.Aeson
import Data.Text
import Data.Maybe
newtype Some = Some { date :: Day } deriving Show
instance FromJSON Some where
parseJSON (Object x) = (x .: pack "date") >>= \v -> Some <$> parseTimeM True defaultTimeLocale "%F" v
test :: Some
test = fromJust $ (decode "{\"date\":\"1999-12-01\"}" :: Maybe Some)
答案 2 :(得分:0)
你必须这样做:
int count=0;
for(int i=0;i<listBoxAddedIntegers.Items.Count;i++)
{
if(listBoxAddedIntegers.Items[i].Items[i].ToString().ToLower().Contains(textBoxSearch.Text.ToLower())
{
count+=1;
}
}
if(count>0)
{
//display your message here after the loop with the count
}
else
{
//display your message with error
}