我正在开发一个程序,允许您从下拉框中选择客户ID。选择客户ID后,客户的信息将从CSV文件中提取并显示在文本框中。
电话号码信息未格式化,但我希望它以格式显示(例如(800)674-3452)。我已经为此编写了一种方法,但我不确定如何调用它。你能帮忙吗?
- 如果这是一个愚蠢的问题,请抱歉。我还在学习。
private void idBox_SelectedIndexChanged(object sender, EventArgs e)
{
try // catch errors
{
string selectedCustomer; // variable to hold chosen customer ID
selectedCustomer = idBox.Text; // retrieve the customer number selected
chosenIndex = 0;
bool found = false; // variable if customer ID was found
while (!found && chosenIndex < allData.Length) // loop through the 2D array
{
if (allData[chosenIndex, 0] == selectedCustomer) // make sure it's the right customer
{
found = true; // Yes (true) found the correct customer
}
chosenIndex++; // add one row
}
chosenIndex -= 1; // subtract one because add 1 before exiting while
/* 0 = customer ID
* 1 = name
* 2 = address
* 3 = city
* 4 = state
* 5 = zip
* 6 = phone
* 7 = email
* 8 = charge account - yes/no
* 9 = good standing - yes/no
*/
nameBox.Text = allData[chosenIndex, 1]; // put name in nameBox
addressBox.Text = allData[chosenIndex, 2]; // put address in addressBox
cityBox.Text = allData[chosenIndex, 3]; // put city in cityBox
stateBox.Text = allData[chosenIndex, 4]; //puts state in stateBox
zipBox.Text = allData[chosenIndex, 5]; // puts zip in zipBox
phoneBox.Text = allData[chosenIndex, 6]; // puts phone number in phoneBox
emailBox.Text = allData[chosenIndex, 7]; // puts email in emailBox
if (allData[chosenIndex, 8] == "Yes") // check if charge account
{
yesChargeRadio.Checked = true; // true if Yes
}
else // otherwise
{
noChargeRadio.Checked = true; // true if No
}
if (allData[chosenIndex, 9] == "Yes") // check for good standing
{
yesStandingRadio.Checked = true; // true if Yes
}
else // otherwise
{
noStandingRadio.Checked = true; // true if No
}
}
catch (Exception errorInfo) // catch error
{
MessageBox.Show("errors: " + errorInfo, "Error",
MessageBoxButtons.OK, MessageBoxIcon.Error); // error message
}
}
以下是检查长度和格式的方法:
private bool numberCheck(string str)
{
const int NUMBER_LENGTH = 10;
bool valid = true;
if (str.Length == NUMBER_LENGTH)
{
foreach (char ch in str)
{
if (!char.IsDigit(ch))
{
valid = false;
}
}
}
else
{
valid = false;
}
return valid;
}
private void formatPhone(ref string str)
{
str = str.Insert(0, "(");
str = str.Insert(4, ")");
str = str.Insert(8, "-");
}
答案 0 :(得分:1)
您的代码差不多完成了。您需要做的是,在设置phoneBox.Text
之前,您可以按以下方式调用方法:
if(numberCheck(allData[chosenIndex, 6]))
{
formatPhone(ref allData[chosenIndex, 6]);
}
phoneBox.Text = allData[chosenIndex, 6];
如果您的方法带有参数参数,格式化的文字将在您的文章中更新,然后您可以将其分配到phoneBox
答案 1 :(得分:0)
我希望我理解你要问的具体部分:你调用你定义的方法就像静态方法IsDigit或MessageBox.Show一样,除了你不需要在方法名前加一个名字然后一个句点,因为该方法是调用它的对象的一部分。
所以,例如,如果我有一个方法:
public void ShowSomething()
{
MessageBox.Show("stuff");
}
在课堂上,我可以这样称呼它:
ShowSomething();
要传递参数,我会在括号中列出它们,就像使用MessageBox.Show一样。
您可以使用像numberCheck
这样的方法返回的值作为任何其他布尔值,因此您可以执行以下任何操作:
bool b = numberCheck(someString);
if (numberCheck(someString))
{
//Do something, like displaying the phone number
}
此MSDN文档可能会对您有所帮助:http://msdn.microsoft.com/en-us/library/ms173114.aspx
答案 2 :(得分:0)
这是你要找的吗? :
.......
phoneBox.Text = numberCheck(allData[chosenIndex, 6]) ?
formatPhone(allData[chosenIndex, 6]) :
allData[chosenIndex, 6];
.......
private string formatPhone(string str)
{
str = str.Insert(0, "(");
str = str.Insert(4, ")");
str = str.Insert(8, "-");
return str;
}
上述代码将检查手机数据的有效性,如果有效设置为phoneBox.Text
格式化的电话号码,则将phoneBox.Text
设置为原始未格式化的手机数据。
For reference如果您不熟悉三元运算符(?
)。