0

アプリに 3 つのテキスト ファイル リソースを追加し、それらから読み込もうとしていますが、ハッキングできないようです。ファイルストリームを使用してみましたが、ResourceReader を使用してみましたが、2 つの組み合わせを試しましたが、運がありません。これをどのように開始できるかについてのアイデアはありますか?

そうそう、リソース ファイルの目的は、form_load で値をコンボ ボックスにロードすることです。EU が必要に応じて val を追加および削除できるように、私はそのようにすることにしました。

それを行うためのより良い(しかし目立たない)方法があると思われる場合は、共有してください.

これが私が試して失敗したものです:

TextFile1(to 3).txt がリソース テキスト ファイルである Filestream アプローチでは、新しい FileStream() ステートメントで静かに終了し、例外はスローされません。

    private void Scan_Form_Load(object sender, EventArgs e)
    {
        // read combo box values from textfile
        AddVals("TextFile1.txt",cmbBox1);
        AddVals("TextFile2.txt", cmbBox2);
        AddVals("TextFile3.txt", cmbBox3);


    }

    private void AddVals(string fileName,ComboBox thisBox)
    {
        using (FileStream repFs = new FileStream(fileName, FileMode.Open, FileAccess.Read))
        {
            StreamReader strReader = new StreamReader(repFs);
            ArrayList aVals = new ArrayList();
            while (strReader.Peek() != -1)
            {
                aVals.Add(strReader.ReadLine());
            }

            foreach (object val in aVals)
            {
                thisBox.Items.Add(val.ToString());
            }
        }
    }

次に、ResourceReader + FileStream アプローチ、同じ問題、主な違いは、ストリームを開く代わりに、fs 以外のアプローチでファイル名文字列を呼び出すだけであるということです。

               private void AddVals(string fileName, ComboBox thisBox)
        { 
        using (FileStream fs = new FileStream(fileName, FileMode.Open))
        {
            IResourceReader reader = new ResourceReader(fs);
            IDictionaryEnumerator en = reader.GetEnumerator();
            while (en.MoveNext())
            {
                string val = en.Value.ToString();
                thisBox.Items.Add(val);
            }
            fs.Close();
            reader.Close();
        }
    }
4

2 に答える 2

1

保存したい情報を app.config ファイルに配置するだけです。ソリューション エクスプローラーでプロジェクトを右クリックし、[設定] タブに移動するだけで、セットアップは非常に簡単です。

ユーザーは技術的には app.config ファイルを直接編集できますが、編集用のフォームをユーザーに提供することもできます。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
            <section name="CSharpWindowsFormsApplication1.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
        </sectionGroup>
    </configSections>
    <applicationSettings>
        <CSharpWindowsFormsApplication1.Properties.Settings>
            <setting name="comboBox1" serializeAs="Xml">
                <value>
                    <ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                        xmlns:xsd="http://www.w3.org/2001/XMLSchema">
                        <string>choice1</string>
                        <string>choice2</string>
                        <string>choice3</string>
                        <string>choice4</string>
                        <string>choice5</string>
                    </ArrayOfString>
                </value>
            </setting>
            <setting name="comboBox2" serializeAs="Xml">
                <value>
                    <ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                        xmlns:xsd="http://www.w3.org/2001/XMLSchema">
                        <string>choice1</string>
                        <string>choice2</string>
                        <string>choice3</string>
                        <string>choice4</string>
                        <string>choice5</string>
                    </ArrayOfString>
                </value>
            </setting>
            <setting name="comboBox3" serializeAs="Xml">
                <value>
                    <ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                        xmlns:xsd="http://www.w3.org/2001/XMLSchema">
                        <string>choice1</string>
                        <string>choice2</string>
                        <string>choice3</string>
                        <string>choice4</string>
                        <string>choice5</string>
                    </ArrayOfString>
                </value>
            </setting>
        </CSharpWindowsFormsApplication1.Properties.Settings>
    </applicationSettings>
</configuration>

編集:明らかでない場合、それらは System.Collections.Specialized.StringCollection タイプの設定です。

と...

        private void Scan_Form_Load(object sender, EventArgs e)
    {
        // read combo box values from textfile
        comboBox1.DataSource = Properties.Settings.Default.comboBox1;
        comboBox2.DataSource = Properties.Settings.Default.comboBox2;
        comboBox3.DataSource = Properties.Settings.Default.comboBox3;
    }

編集: 上で述べたように、ソリューション エクスプローラーでプロジェクトを右クリックし、[設定] タブに移動します。そこに入ったら:

  1. 「comboBox1」など、任意の名前で設定を作成します。
  2. タイプをSystem.Collections.Specialized.StringCollectionに変更します
  3. スコープを好きなように変更します。(これを使用して、設定が特定のユーザーまたはアプリ全体に適用されるかどうかを設定できます)
  4. 値エディターをクリックし、行の右側にある省略記号 [...] ボタンをクリックします。
  5. 各行に必要なオプションを追加します。
  6. 必要に応じて繰り返します。

Visual Studio は、構成ファイルですべてをフォーマットし、動作するために必要なすべてをセットアップする方法を処理します。

于 2011-07-18T07:11:17.860 に答える
0

正確には、代わりに TNifile を使用してください。セクションが存在しない場合の最初の実行では、デフォルト値を書き込みます。次回は inifile を読むだけです。

inifile は、EU 向けに簡単に編集できる必要があります

于 2011-07-18T06:54:29.807 に答える