简体   繁体   中英

c# dictionary not working?

Not sure exactly whats going on here as it does not give me an error message when I am trying to run this part of the code.

Basically its supposed to put the text from the dictionary into a richtextbox when the option is selected from the drop down menue

Like if I select "Outage" from the drop down it should put the contents of that into the richtextbox

public partial class Form1 : Form
{
    public Dictionary<string, string> templates = new Dictionary<string, string>();

    public Form1()
    {
        // Templates
        templates.Add("Outage", "Server Name: \nTest: \nTest (test): \n");
        templates.Add("Out", "test: \nTest: \nTest:");
        templates.Add("Custom", @"C:\Users\johnathan_jackson\Downloads\Remedy Tool\Templates\custom templates\test.txt");
        templates.Add("Test", "Server Name: \nTest: \nTest: \n");
        templates.Add("Basic", "OS: \nIP Address: \nApplications affected: \nWhen did this last work: \n Number of users affected: \nSpecific error message: \nTroubleshooting steps taken \nDetailed Resolution \nIf not service resolvable, Why:");
        templates.Add("Xerox", "Serial Number (mandatory): \nAsset Number: \nContact Phone Number: \nContact e-mail address: \nFull Address: \nDescription of the Supplies that are needed: \nPart # (if customer has it): \nError message (if any): \nLocation (Building/Floor/etc): \nModel #: \n");

        NavigateURL navigateBrowser = new NavigateURL();

        InitializeComponent();

        Remedy_Automate.AllowNavigation = true;
        Remedy_Automate.ScriptErrorsSuppressed = true;
        Remedy_Automate.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(navigateBrowser.DocumentState);

        // GetInfo from Remedy to these controls
        navigateBrowser.cIncidentID = incidentID_Entry;
        navigateBrowser.cEmployeeID = employeeID_Entry;
        navigateBrowser.cEmployeeName = employeeName_Entry;
        navigateBrowser.cPhoneNumber = phoneNumber_Entry;

        navigateBrowser.cNotes = Notes_Entry;

        getinfo.Click += new System.EventHandler(navigateBrowser.GetInfoClick);
        sendinfo.Click += new System.EventHandler(navigateBrowser.ModifyInfo);

        browserTabControl.Selecting += browserTabControl_Selecting;
        browserTabControl.HandleCreated += browserTabControl_HandleCreated;

        wTemplates.DropDownStyle = ComboBoxStyle.DropDownList;

        // set browser control in 'cNavigateURL' class
        navigateBrowser.BrowserInstance = Remedy_Automate;
        navigateBrowser.NavigateToUrl("http://fit.honeywell.com/arsys");

    }// Form1

    private void sendinfo_click(object sender, EventArgs e)
    {
        string notestext = Notes_Entry.Text;
        Console.WriteLine(notestext);
    }

    private void template_selected(object sender, EventArgs e)
    {
        String pTempText = wTemplates.Text;
        Console.WriteLine(pTempText);
        switch(pTempText)
        {
            case "Outage":
                Notes_Entry.Text = templates[pTempText];
                break;
            case "Basic":
            Notes_Entry.Text = templates[pTempText];
                break;
            case "Custom":
                Notes_Entry.Text = templates[pTempText];
                break;
            case "Out":
                Notes_Entry.Text = templates[pTempText];
                break;
        } 

I don't see where your binding your Dictionary to your combo box. You need to add the following:

wTemplates.DisplayMember = "Key";
wTemplates.ValueMember = "Value";
wTemplates.DataSource = new BindingSource(templates, null);

I would also recommend that you add another entry at the top of your dictionary so that Item 0 is not a real choice, such as ("Select Item", ""). This is because the selected_item event will fire when your combo box gets filled the first time.

So your code would look like this in the Form1():

        // Templates
        templates.Add("Select Item", "");
        templates.Add("Outage", @"Server Name: \nTest: \nTest (test): \n");
        templates.Add("Out", @"test: \nTest: \nTest:");
        templates.Add("Custom", @"C:\Users\johnathan_jackson\Downloads\Remedy Tool\Templates\custom templates\test.txt");
        templates.Add("Test", @"Server Name: \nTest: \nTest: \n");
        templates.Add("Basic", @"OS: \nIP Address: \nApplications affected: \nWhen did this last work: \n Number of users affected: \nSpecific error message: \nTroubleshooting steps taken \nDetailed Resolution \nIf not service resolvable, Why:");
        templates.Add("Xerox", @"Serial Number (mandatory): \nAsset Number: \nContact Phone Number: \nContact e-mail address: \nFull Address: \nDescription of the Supplies that are needed: \nPart # (if customer has it): \nError message (if any): \nLocation (Building/Floor/etc): \nModel #: \n");

        wTemplates.DropDownStyle = ComboBoxStyle.DropDownList;

        wTemplates.SelectedIndexChanged += template_selected;

        wTemplates.DisplayMember = "Key";
        wTemplates.ValueMember = "Value";
        wTemplates.DataSource = new BindingSource(templates, null);

Then have the handler actually have the code in it.

    private void template_selected(object sender, EventArgs e)
    {
        String pTempText = wTemplates.Text;
        Console.WriteLine(pTempText);
        switch (pTempText)
        {
            case "Outage":
                Notes_Entry.Text = templates[pTempText];
                break;
            case "Basic":
                Notes_Entry.Text = templates[pTempText];
                break;
            case "Custom":
                Notes_Entry.Text = templates[pTempText];
                break;
            case "Out":
                Notes_Entry.Text = templates[pTempText];
                break;
        }
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM