1

これは本当に奇妙です。何らかの理由でcontextmenuクリックが複数回発生します。ボタンに関連付けられたコンテキストメニューがあるため、ボタンをクリックするcontextmenuと、その下に表示されます(より多くのオプションがあります)。

1 つのオプションはlistviewExcel に保存することで、もう 1 つは .csv に保存することです。

つまり、基本的にここで起こることは、複数の Excel シートが開くということです。もちろん、開くExcelは1つだけです:)

これが私のコードです:

private void toolButtonNoBorder3_Click(object sender, EventArgs e)
{
contexMenuuu.Show(toolButtonNoBorder3, 
                                 new Point(0, toolButtonNoBorder3.Height));
contexMenuuu.ItemClicked += 
               new ToolStripItemClickedEventHandler(contexMenuuu_ItemClickedd);
}


void contexMenuuu_ItemClickedd(object sender, ToolStripItemClickedEventArgs e)
{
contexMenuuu.Hide();
contexMenuuu.Close();


if (e.ClickedItem.Text == "Excel")
{
    Microsoft.Office.Interop.Excel.Application app = 
                    new Microsoft.Office.Interop.Excel.Application();
    app.Visible = true;
    Microsoft.Office.Interop.Excel.Workbook wb = app.Workbooks.Add(1);
    Microsoft.Office.Interop.Excel.Worksheet ws = 
           (Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets[1];
    int i = 1;
    int i2 = 1;
    int iad = 1;
    foreach (ListViewItem lvi in flatListView1.Items)
    {
        i = 1;
        foreach (ListViewItem.ListViewSubItem lvs in lvi.SubItems)
        {
            if (i2 == 1)
            {
                iad = 1;
                foreach (ColumnHeader lvfi in flatListView1.Columns)
                {
                    try
                    {
                        ws.Cells[i2, iad] = lvfi.Text;
                    }

                    catch (Exception ee)
                    {

                    }

                    iad++;
                }

            }
            else
            {
                try
                {
                    ws.Cells[i2, i] = lvs.Text;
                }

                catch (Exception ee)
                {

                }
            }


            i++;
        }
        i2++;
    }
}
else if (e.ClickedItem.Text == "CSV")
{
    Stream myStream;
    SaveFileDialog saveFileDialog1 = new SaveFileDialog();

    saveFileDialog1.Filter = "csv files (*.csv)|*.csv";
    saveFileDialog1.FilterIndex = 2;
    saveFileDialog1.RestoreDirectory = true;

    if (saveFileDialog1.ShowDialog() == DialogResult.OK)
    {
        if ((myStream = saveFileDialog1.OpenFile()) != null)
        {
            myStream.Close();
            ListViewToCSV(flatListView1, saveFileDialog1.FileName, true);

        }
    }
}

}
4

2 に答える 2

4

ウィンドウのコンストラクターにある必要があります。

public MyWindow()
{

//here inicialization

contexMenuuu.ItemClicked +=
new ToolStripItemClickedEventHandler(contexMenuuu_ItemClickedd);
}

これは、イベント ハンドラーを複数回追加する際によくあるエラーです。次回は注意してください。

于 2012-11-16T18:04:21.823 に答える