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

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

ただいまの
回答率

88.62%

C#で作成したが、Combobox等が実装されない

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 266

great-degin

score 9

画像を取りこみ、その画像に処理をかけるプログラムをVisual Studio 2019で作成しました。
配られたお手本のソースコードに描いてある通りに作成したはずなんですが、
comboBox1
openFileDialog1
pictureBox1
saveFileDialog1
pictureBox2
textBox1
の部分にエラーメッセージ(CS0103)が表示され、現在のコンテキストに存在しないと出ます。

一体何がいけないのでしょうか?

エラーメッセージ

重大度レベル    コード    説明    プロジェクト    ファイル    行    抑制状態
エラー    CS0103    現在のコンテキストに 'comboBox1' という名前は存在しません。    WindowsFormsApp4    C:\Users\me\source\repos\WindowsFormsApp4\WindowsFormsApp4\Form1.cs    25    アクティブ

該当のソースコード

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;

namespace WindowsFormsApp4
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
                //初期化
                comboBox1.Items.Clear();

                //項目の追加
                comboBox1.Items.Add("処理なし");
                comboBox1.Items.Add("平滑化");
                comboBox1.Items.Add("鮮鋭化");
                comboBox1.Items.Add("エッジ検出");
                comboBox1.Items.Add("二値化");

                //初期選択を"処理なし"に設定
                comboBox1.SelectedIndex = 0;
            }

            //読み込み処理
            private void button1_Click(object sender, EventArgs e)
            {
                if (openFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    Bitmap bmp = new Bitmap(openFileDialog1.FileName);
                    pictureBox1.Image = bmp;

                }
            }

            //保存
            private void button2_Click(object sender, EventArgs e)
            {
                if (saveFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    pictureBox1.Image.Save(saveFileDialog1.FileName);
                }
            }

            //処理開始
            private void button3_Click(object sender, EventArgs e)
            {
                Bitmap origin = new Bitmap(pictureBox1.Image);

                //画像サイズの取得
                int nx = origin.Width;
                int ny = origin.Height;

                double[,] data = new double[origin.Width, origin.Height];
                double[,] Result = new double[origin.Width, origin.Height];
                Bitmap dst = new Bitmap(nx, ny);

                //ピクセルデータの取得
                for (int i = 0; i < nx; i++)
                {
                    for (int j = 0; j < ny; j++)
                    {
                        data[i, j] = (double)((origin.GetPixel(i, j).R + origin.GetPixel(i, j).G + origin.GetPixel(i, j).B) / 3);
                    }
                }

                switch (comboBox1.SelectedItem.ToString())
                {
                    case "処理なし":
                        pictureBox2.Image = pictureBox1.Image;
                        break;

                    case "平滑化":
                        Result = smoothing(data);
                        dst = gray_level_transformation(Result, nx, ny);
                        pictureBox2.Image = dst;
                        break;

                    case "鮮鋭化":
                        Result = sharpening(data);
                        dst = gray_level_transformation(Result, nx, ny);
                        pictureBox2.Image = dst;
                        break;

                    case "エッジ検出":
                        Result = edge_detectioning(data);
                        dst = gray_level_transformation(Result, nx, ny);
                        pictureBox2.Image = dst;
                        break;

                    case "二値化":
                        //閾値
                        int n = int.Parse(textBox1.Text);
                        Result = thresholding(data, n);
                        dst = gray_level_transformation(Result, nx, ny);
                        pictureBox2.Image = dst;
                        break;
                }

            }

            //処理結果保存
            private void button4_Click(object sender, EventArgs e)
            {
                if (saveFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    string extension = Path.GetExtension(saveFileDialog1.FileName);

                    pictureBox2.Image.Save(saveFileDialog1.FileName);
                }
            }

            //平滑化処理
            private double[,] smoothing(double[,] data)
            {
                int xsize, ysize;
                double[,] c = {
                           { 1.0 / 9.0, 1.0 / 9.0, 1.0 / 9.0},
                           { 1.0 / 9.0, 1.0 / 9.0, 1.0 / 9.0},
                           { 1.0 / 9.0, 1.0 / 9.0, 1.0 / 9.0}
                         };

                xsize = data.GetLength(0);
                ysize = data.GetLength(1);

                double[,] Result = new double[xsize, ysize];

                for (int j = 0; j < ysize; j++)
                    for (int i = 0; i < xsize; i++)
                        Result[i, j] = 0.0;
                for (int j = 1; j < ysize - 1; j++)
                    for (int i = 1; i < xsize - 1; i++)
                    {
                        for (int k = 0; k < 3; k++)
                            for (int l = 0; l < 3; l++)
                                Result[i, j] += (double)data[i + l - 1, j + k - 1] * c[l, k];
                    }

                return Result;
            }

            //鮮鋭化処理
            private double[,] sharpening(double[,] data)
            {
                int xsize, ysize;
                double[,] c = {
                           {  0.0,  -1.0,  0.0},
                           { -1.0,   5.0, -1.0},
                           {  0.0,  -1.0,  0.0}
                         };

                xsize = data.GetLength(0);
                ysize = data.GetLength(1);

                double[,] Result = new double[xsize, ysize];

                for (int j = 0; j < ysize; j++)
                    for (int i = 0; i < xsize; i++)
                        Result[i, j] = 0.0;
                for (int j = 1; j < ysize - 1; j++)
                    for (int i = 1; i < xsize - 1; i++)
                    {
                        for (int k = 0; k < 3; k++)
                            for (int l = 0; l < 3; l++)
                                Result[i, j] += (double)data[i + l - 1, j + k - 1] * c[l, k];
                    }

                return Result;
            }

            //エッジの検出
            private double[,] edge_detectioning(double[,] data)
            {
                int xsize, ysize;
                double[,] c = {
                           {  0.0,   1.0,  0.0},
                           {  1.0,  -4.0,  1.0},
                           {  0.0,   1.0,  0.0}
                         };

                xsize = data.GetLength(0);
                ysize = data.GetLength(1);

                double[,] Result = new double[xsize, ysize];

                for (int j = 0; j < ysize; j++)
                    for (int i = 0; i < xsize; i++)
                        Result[i, j] = 0.0;
                for (int j = 1; j < ysize - 1; j++)
                    for (int i = 1; i < xsize - 1; i++)
                    {
                        for (int k = 0; k < 3; k++)
                            for (int l = 0; l < 3; l++)
                                Result[i, j] += (double)data[i + l - 1, j + k - 1] * c[l, k];
                    }

                return Result;
            }

            //2値化処理
            private double[,] thresholding(double[,] data, int th)
            {

                int xsize, ysize;

                xsize = data.GetLength(0);
                ysize = data.GetLength(1);


                double[,] Result = new double[xsize, ysize];

                for (int j = 0; j < ysize; j++)
                    for (int i = 0; i < xsize; i++)
                        Result[i, j] = 0.0;

                for (int j = 0; j < ysize; j++)
                    for (int i = 0; i < xsize; i++)
                    {

                        if (data[i, j] > th)
                        {
                            Result[i, j] = 255;

                        }
                        else
                        {
                            Result[i, j] = 0;
                        }
                    }
                return Result;

            }

            //
            private Bitmap gray_level_transformation(double[,] Result, int nx, int ny)
            {
                double max = double.MinValue;
                double min = double.MaxValue;
                byte[,] img = new byte[nx, ny];

                for (int i = 0; i < nx; i++)
                    for (int j = 0; j < ny; j++)
                    {
                        if (max < Result[i, j])
                            max = Result[i, j];

                        if (min > Result[i, j])
                            min = Result[i, j];
                    }
                Bitmap bmp = new Bitmap(nx, ny);
                Color c_c;
                for (int i = 0; i < nx; i++)
                    for (int j = 0; j < ny; j++)
                    {
                        img[i, j] = (byte)(255 * (Result[i, j] - min) / (max - min));
                        c_c = Color.FromArgb(img[i, j], img[i, j], img[i, j]);
                        bmp.SetPixel(i, j, c_c);
                    }
                return bmp;
            }
        }
    }
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

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

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

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

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

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

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • y_waiwai

    2020/04/18 00:11

    エラーメッセージをそのままコピペで提示しましょう

    キャンセル

  • great-degin

    2020/04/18 00:22

    ご指摘ありがとうございます。追記いたしました。

    キャンセル

回答 2

checkベストアンサー

+1

WindowsFormのコードは、コードをコピペするだけではダメです

デザイン画面でそれぞれのコンポーネントをフォーム上に配置してやらないとダメです

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

配られたお手本のソースコードに描いてある通りに作成したはずなんですが、

そのお手本にどういう手順が書かれていたのかわかりませんが、本当に書かれているとおりに作業してエラーになるのだとしたら、そのお手本が説明すべき事を説明できていないんでしょう。

そもそもWinFormsの開発の方法がわからないという事なら、公式のチュートリアルからやった方が良いんじゃないでしょうか。

https://docs.microsoft.com/ja-jp/visualstudio/ide/tutorial-1-create-a-picture-viewer?view=vs-2019

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 88.62%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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