我正在制作一個高爾夫球記分卡程式。他們選擇的選定課程有一個文本檔案,當他們單擊一個按鈕時,我希望程式將上一輪顯示為我創建的 numericUpDowns(其中有 9 個名為 num(1-9))。
我希望程式顯示上一輪,然后當用戶保存他們當前的輪次時,它會覆寫紡織品并洗掉舊輪次,并保存新輪次。我希望這對我正在嘗試做的事情有意義。我需要將紡織字串轉換為整數,這樣我就可以顯示分數并保存它們。
我試過這個但它不起作用我只是想看看是否顯示了一行。現在,文本檔案的數字 0 為每個 numericUpDown 垂直向下移動了 9 次,但 numUpDowns 中沒有顯示任何內容。
try
{
//open file
StreamReader InputFile;
InputFile = File.OpenText("Course1.txt");
//read lines and display previous scores
num1.Value.ToString(Convert.ToInt32(InputFile.ReadLine()));
}
catch (IOException)
{
MessageBox.Show("There was an error loading Course1.txt");
}
uj5u.com熱心網友回復:
這就是我的做法,使用通用的 WinForms 應用程式來復制事物。設定是我在表單上放置了一個文本框、一個向上/向下數字、一個標簽(用于錯誤訊息)和一個按鈕。然后,在按鈕處理程式中,我這樣做了:
private void button1_Click(object sender, EventArgs e)
{
if (int.TryParse(textBox1.Text, out var result) && result >= numericUpDown1.Minimum && result <= numericUpDown1.Maximum)
{
numericUpDown1.Value = result;
}
else
{
label1.Text = $"You must enter a numeric value between {numericUpDown1.Minimum} and {numericUpDown1.Maximum}";
}
}
使用TryParse而不是Convert.ToInt32允許我檢查資料的有效性而不會產生例外的代價。
你的代碼num1.Value.ToString(Convert.ToInt32(InputFile.ReadLine()));毫無意義。這部分:num1.Value.ToString獲取的當前值num1.Value并將其轉換為字串(您不分配給任何東西)。該代碼甚至可以編譯嗎?沒有int.ToString將整數作為引數的多載。你想給什么分配一個整數num1.Value(就像我的代碼一樣)。
這其中的關鍵代碼是:
int.TryParse(textBox1.Text, out var result)
它試圖將字串轉換為整數 ( result)。如果成功則回傳true,如果不能進行轉換則回傳false,并且......
numericUpDown1.Value = result
它將該(整數)結果分配給上/下控制元件的值。
至于讀取文本檔案和填充一組控制元件的問題,這有點困難。假設您的文本檔案如下所示:
0
1
2
...
9
即 10 行,編號為 0 到 9,每行一個。并且,假設您有十個向上/向下控制元件(num1、num2、... num10)。一個技巧是確保您不會超出任何陣列的邊界。我會這樣做(我只是在此處的 SO 文本框中撰寫代碼):
var lines = File.ReadLines("Course1.txt");
var controls = new NumericUpDown [] {
num1,
num2,
//...
num10,
};
var count = Math.Min(lines.Length, controls.Length);
for (var i = 0; i < count; i) {
if (int.TryParse(lines[i], out var result) {
controls[i].Value = result;
}
}
uj5u.com熱心網友回復:
這是你想要做的嗎?
num1.Value = Convert.ToInt32(InputFile.ReadLine());
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/373423.html
