質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

受付中

Visual Studio データベースへの画像の格納、及び表示(PictureBoxを使用)

niko2
niko2

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

1回答

0評価

0クリップ

3953閲覧

投稿2016/12/02 15:15

###前提・実現したいこと
Visual Studio 2015 にてC#を使いWindows Formsのアプリケーションを開発しています。
データベースはPostgreSQL(9.5)
Npgsql(3.1.9)を使用し、データベースにアクセスしています。

今回実現したいことは、Form1(↓画像1番目)の画像選択ボタンを押すと、Form2(↓画像2番目)に移動し、Form2にて画像をダブルクリックすると、Form1のpicturebox1に画像が入り(←ここまで自分で解決済み)、さらにデータベースに画像を格納することです。また、データベースに格納した画像は、別のフォームで使用しPictureBoxなどで表示します。

しかし、PictureBoxに表示された画像をデータベースに格納する方法、またデータベースに格納された画像を表示する方法がわかりません。
お教えいただけないでしょうか

Form1
イメージ説明
Form2
イメージ説明

###該当のソースコード
Form1()

C#

using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO; using System.Diagnostics; namespace WindowsFormsApplication1 { public partial class TRDetailsEdit : Form { public PictureBox pb { get; internal set; } public TRDetailsEdit() { InitializeComponent(); } private void TRDetailsEdit_Load(object sender, EventArgs e) { if (pb != null) pictureBox1.Image = pb.Image; } private void button4_Click(object sender, EventArgs e) { WindowsFormsApplication1.ImageExplorer ie = new ImageExplorer(); ie.Show(); Close(); } } }

Form2

C#

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.IO; using System.Diagnostics; namespace WindowsFormsApplication1 { public partial class ImageExplorer : Form {###ヘディングのテキスト public ImageExplorer() { InitializeComponent(); } private void ImageExplorer_Load(object sender, EventArgs e) { comboBox1.SelectedIndex = 0; } private void pictureBox_DoubleClick(object sender, EventArgs e) { PictureBox pb = (PictureBox)sender; WindowsFormsApplication1.TRDetailsEdit trde = new TRDetailsEdit(); trde.pb = pb; trde.Show(); Close(); } private void CreateThumbnails(string path) { string[] filePaths; int count = 0; foreach (PictureBox pb in flowLayoutPanel1.Controls) { Image img = pb.Image; pb.Image = null; img.Dispose(); } flowLayoutPanel1.Controls.Clear(); filePaths = Directory.GetFiles(path); //指定されたフォルダー内のファイルのパスのコレクションを取得 foreach (string filePath in filePaths) //ファイルのパスのコレクションから1つずつパスを取得 { try { //指定されたパスのファイルからサムネイル用のイメージを作成 Image img1 = Bitmap.FromFile(filePath); Image img2 = img1.GetThumbnailImage(350, 245, null, IntPtr.Zero); img1.Dispose(); PictureBox pb = new PictureBox(); pb.Margin = new Padding(10); pb.Image = img2; pb.SizeMode = PictureBoxSizeMode.AutoSize; pb.Tag = filePath; pb.DoubleClick += new EventHandler(pictureBox_DoubleClick); flowLayoutPanel1.Controls.Add(pb); toolTip1.SetToolTip(pb, Path.GetFileName(filePath)); count++; } catch { //続行してコレクションの次の要素を処理 } } if (count == 0) MessageBox.Show("イメージファイルが見つかりませんでした。", button1.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); } private void button1_Click(object sender, EventArgs e) { if (folderBrowserDialog1.ShowDialog() == DialogResult.OK) { textBox1.Text = folderBrowserDialog1.SelectedPath; CreateThumbnails(folderBrowserDialog1.SelectedPath); } } private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { flowLayoutPanel1.FlowDirection = (FlowDirection)comboBox1.SelectedIndex; } } }

###参考程度にNpgsqlを使用したデータベースアクセス(今回のFormとはつながりはありません。)

C#

private void connectDatebase() { StringBuilder sb = new StringBuilder(); sb.Append("Server=localhost;"); sb.Append("Port=5433;"); sb.Append("User Id=postgres;"); sb.Append("Password=***;"); //インストール時入れた値 sb.Append("Database=db_football;"); string connString = sb.ToString(); using (var con = new NpgsqlConnection(connString)) { try { con.Open(); //データ検索 var cmd = new NpgsqlCommand(@"select schedule1,schedule2,schedule3,schedule4,schedule5,schedule6,schedule7,schedule8,schedule9,schedule10 from tb_calendar where year = :year and month = :month and day = :day;", con); cmd.Parameters.Add(new NpgsqlParameter("year", DbType.Int32) { Value = year }); cmd.Parameters.Add(new NpgsqlParameter("month", DbType.Int32) { Value = month }); cmd.Parameters.Add(new NpgsqlParameter("day", DbType.Int32) { Value = day }); var dataReader = cmd.ExecuteReader(); //クエリを取得 label2.Text = dataReader.HasRows.ToString(); if (dataReader.HasRows) { while (dataReader.Read()) //レコードを進める { //Console.WriteLine("{0}", dataReader["schedule1"]); //int y = int.Parse(dataReader["year"].ToString()); label4.Text = dataReader["schedule1"].ToString(); label5.Text = dataReader["schedule2"].ToString(); label6.Text = dataReader["schedule3"].ToString(); label7.Text = dataReader["schedule4"].ToString(); label3.Text = dataReader["schedule5"].ToString(); label9.Text = dataReader["schedule6"].ToString(); label10.Text = dataReader["schedule7"].ToString(); label11.Text = dataReader["schedule8"].ToString(); label12.Text = dataReader["schedule9"].ToString(); label13.Text = dataReader["schedule10"].ToString(); } //Console.Read(); dataReader.Close(); } else { var cmd2 = new NpgsqlCommand(@"insert into tb_calendar values (null,'2016-9-12',null,null,null,null,null,null,null,null,null,null,:year,:month,:day)", con); cmd2.Parameters.Add(new NpgsqlParameter("year", DbType.Int32) { Value = year }); cmd2.Parameters.Add(new NpgsqlParameter("month", DbType.Int32) { Value = month }); cmd2.Parameters.Add(new NpgsqlParameter("day", DbType.Int32) { Value = day }); dataReader.Close(); var dataReader2 = cmd2.ExecuteReader(); } } catch (Exception e) { MessageBox.Show(e.ToString()); } } }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます