読者です 読者をやめる 読者になる 読者になる

6日間で文献管理アプリを作る(4日目)

メニューバー「データ」/「追加」「削除」を定義

  • まずは以下の「add_remove.cs」を追加
using System.Windows.Forms;
using System.Xml.Linq;
using System.Linq;

namespace 文献管理
{
    public partial class Form1
    {
        void article_add(string a)
        {
            try
            {
                bool hantei = true; //重複がないかどうかを判定する
                XDocument xdoc1 = XDocument.Load(choose_file);
                foreach (var xid in xdoc1.Descendants("PMID"))
                {
                    if (xid.Value == a)
                    {
                        hantei = false;
                    }
                }
                if (hantei)
                {
                    XDocument xdoc2 = XDocument.Load("http://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi?db=pubmed&mode=XML&id=" + a);
                    xdoc1.Element("PubmedArticleSet").Add(xdoc2.Element("PubmedArticleSet").Element("PubmedArticle"));
                    xdoc1.Save(choose_file);
                    MessageBox.Show("文献を追加しました");
                    make_html();
                }
                else
                {
                    MessageBox.Show("すでにその文献は登録されています");
                }
            }
            catch
            {
                MessageBox.Show("文献を追加できませんでした");
            }
        }

        void article_remove(string a)
        {
            try
            {
                XDocument xdoc1 = XDocument.Load(choose_file);
                bool hantei = false; //該当する文献が存在するかどうかを判定する
                var n = xdoc1.Element("PubmedArticleSet").Elements("PubmedArticle").ToArray();
                foreach (XElement d in n)
                {
                    if (d.Element("MedlineCitation").Element("PMID").Value == a)
                    {
                        d.Remove();
                        hantei = true;
                    }
                }
                if (hantei)
                {
                    xdoc1.Save(choose_file);
                    MessageBox.Show("文献を削除しました");
                    make_html();
                }
                else
                {
                    MessageBox.Show("該当する文献がありませんでした");
                }
            }
            catch
            {
                MessageBox.Show("文献を削除できませんでした");
            }
        }
    }
}
  • 次に関数を呼び出すためのコードを追加

追加

        private void 追加ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (choose_file != null)
            {
                input_form f = new input_form();
                f.Text = "追加";
                f.button1.Text = "追加";
                if (f.ShowDialog(this) == DialogResult.OK)
                {
                    int kensyo; //入力された文字が0以上の数字であることを確認
                    int.TryParse(f.textBox1.Text, out kensyo);
                    if (kensyo > 0)
                    {
                        article_add(f.textBox1.Text);
                    }
                    else
                    {
                        MessageBox.Show("入力が不適切です");
                    }
                    f.Dispose();
                }
            }
        }

削除

        private void 削除ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (choose_file != null)
            {
                input_form f = new input_form();
                f.Text = "削除";
                f.button1.Text = "削除";
                if (f.ShowDialog(this) == DialogResult.OK)
                {
                    int kensyo; //入力された文字が0以上の数字であることを確認
                    int.TryParse(f.textBox1.Text, out kensyo);
                    if (kensyo > 0)
                    {
                        article_remove(f.textBox1.Text);
                    }
                    else
                    {
                        MessageBox.Show("入力が不適切です");
                    }
                    f.Dispose();
                }
            }
        }