SQLの窓 イラストAC フリー素材

2019年08月26日

C# : PHP と連携してバイナリデータを WebClient.UploadDataAsync でそのままアップロードする

WebClient.UploadDataAsync Method

バイナリデータは、HTTP のボディ部分で送られるので、ファイル名は HTTP ヘッダにセットして渡します
using System;
using System.IO;
using System.Net;
using System.Windows.Forms;

namespace WebPut
{
	public partial class Form1 : Form
	{
		// 読み込むファイルのパス
		string image_path = @"C:\Users\sworc\Pictures\IMG0330.JPG";

		public Form1()
		{
			InitializeComponent();
		}

		private void button1_Click(object sender, EventArgs e)
		{
			WebClient webClient = new WebClient();
			// ファイル名を HTTP ヘッダーで渡す
			webClient.Headers.Add("UserData", Path.GetFileName(image_path));

			// イベント作成
			webClient.UploadDataCompleted += (object _sender, UploadDataCompletedEventArgs _e) => {

				if (_e.Error != null)
				{
					// エラー
					Console.WriteLine(_e.Error.Message);
				}
				else
				{
					// サーバからの応答( バイト配列なのでテキストに変換 )
					Console.WriteLine(System.Text.Encoding.GetEncoding("UTF-8").GetString(_e.Result));
				}

			};

			// 画像ファイルをバイト配列に読み込む
			FileStream file_stream = new FileStream(image_path, FileMode.Open, FileAccess.Read);
			byte[] bin_buffer = new byte[file_stream.Length];
			file_stream.Read(bin_buffer, 0, (int)file_stream.Length);
			file_stream.Close();

			// バイナリデータアップロード開始
			string access_url = "http://localhost/php/upload/php-put.php";
			webClient.UploadDataAsync(new Uri(access_url), bin_buffer);

		}
	}
}


PHP 側は、php://input を利用した単純なコードです。

php-put.php
<?PHP
header( "Content-Type: text/html; charset=utf-8" );

$id = uniqid();

$fp = fopen( "php://input", "rb" );
$wfp = fopen( "data/{$id}_{$_SERVER["HTTP_USERDATA"]}", "wb" );

while( $ret = fread( $fp, 4096 ) ) {

	fwrite( $wfp, $ret );

}

fclose($wfp);
fclose($fp);

?>
データが保存されました




posted by at 2019-08-26 21:25 | C# | このブログの読者になる | 更新情報をチェックする

C# : WebClient で JSON データを取得後 Json.NET でオブジェクト化( ついでに PropertyInfo でプロパティデータ一覧を foreach で取得 )

Json.NET は ダウンロードボタンで NuGet 用のコマンドラインが表示されます

Json.NET でオブジェクトに変換するだけならば、 { set; get; } でプロパティ化せずとも単純な public な変数の定義で可能です。ここでは、プロパティの名前の一覧を配列で準備して foreach でデータを取得できるように { set; get; } でプロパティ化しています。
using Newtonsoft.Json;
using System;
using System.Net;
using System.Reflection;
using System.Text;
using System.Web;
using System.Windows.Forms;

namespace WebJson
{
	public partial class Form1 : Form
	{

		// フィールド名一覧
		private string[] field_names = {"社員コード", "氏名", "フリガナ", "所属", "性別", "作成日", "更新日", "給与", "手当", "管理者" };

		public Form1()
		{
			InitializeComponent();
		}

		private void action_Click(object sender, EventArgs e)
		{
			WebClient webClient = new WebClient();
			webClient.Encoding = Encoding.GetEncoding("utf-8");

			// DownloadStringCompleted の引数は、https://docs.microsoft.com/ja-jp/dotnet/api/system.net.downloadstringcompletedeventhandler
			webClient.DownloadStringCompleted += (object _sender, DownloadStringCompletedEventArgs _e) => {

				Console.WriteLine(_e.Result);

				// Json.NET は、NuGet でインストールします : Install-Package Newtonsoft.Json
				// https://www.newtonsoft.com/json
				JsonData[] data = JsonConvert.DeserializeObject<JsonData[]>(_e.Result);

				// 画面にデータをセット
				name.Text = data[0].氏名;
				furi.Text = data[0].フリガナ;

				// プロパティ名一覧より、データを取得
				PropertyInfo property;
				string value;
				foreach (string name in field_names)
				{
					property = typeof(JsonData).GetProperty(name);
					value = property.GetValue(data[0]).ToString();
					Console.WriteLine(value);
				}

			};

			// HttpUtility.UrlEncode は System.Web を参照する必要があります
			string access_url_query_string = $"https://lightbox.sakura.ne.jp/demo/json/syain_api_bind.php?name={HttpUtility.UrlEncode("田", Encoding.UTF8)}";

			// WEB データ取得開始
			webClient.DownloadStringAsync(new Uri(access_url_query_string));

		}

		private class JsonData
		{
			// PropertyInfo.GetValue を使用する為に { set; get; } でメソッド化しています
			public string 社員コード { set; get; }
			public string 氏名 { set; get; }
			public string フリガナ { set; get; }
			public string 所属 { set; get; }
			public int 性別 { set; get; }
			public DateTime 作成日 { set; get; }
			public DateTime 更新日 { set; get; }
			public int 給与 { set; get; }
			public int 手当 { set; get; }
			public string 管理者 { set; get; }
		}
	}
}




posted by at 2019-08-26 20:08 | C# | このブログの読者になる | 更新情報をチェックする

2019年08月14日

C# : Microsoft Access の接続で、他の RDBMS( ここでは MySQL ) にエクスポートを行う

OleDb で接続し、select 〜 into 構文の出力先を [ODBC; ... ] を使用した接続文字列の記述で SQL 上で直接参照してエクスポートを実現します。この際、キーは設定されないので2回目以降の insert 〜 select 構文で追加エクスポートが可能です

using System;
using System.Data.OleDb;

namespace Export_MySQL
{
	class Program
	{
		static void Main(string[] args)
		{
			OleDbConnection accdb;
			bool bError = false;
			string mysql_connection_string = "[ODBC;Driver={MySQL ODBC 5.3 Unicode Driver};server=localhost;database=lightbox;uid=root;pwd=]";

			using (accdb = new OleDbConnection())
			using (OleDbCommand command = new OleDbCommand())
			{
				string file_path = @"C:\Users\sworc\Documents\hanbaic-set\hanbaic.accdb";
				accdb.ConnectionString = $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={file_path};";
				try
				{
					accdb.Open();
					Console.WriteLine($"{file_path} で接続されました");
				}
				catch (Exception ex)
				{
					Console.WriteLine("接続エラーです:" + ex.Message);
					bError = true;
				}

				if (bError)
				{
					return;
				}

				// テーブルを新規作成してエクスポート
				string query = 
$@"select * into {mysql_connection_string}.社員マスタ_accdb
	from 社員マスタ";

				Console.WriteLine(query);

				try
				{
					// コマンドオブジェクトに接続をセット
					command.Connection = accdb;
					command.CommandText = query;
					command.ExecuteNonQuery();

					Console.WriteLine("エクスポートされました");
				}
				catch (Exception ex)
				{
					Console.WriteLine("SQL 実行エラーです:" + ex.Message);
					
					bError = true;
				}

				if (bError)
				{
					// 既存テーブルにエクスポート
					query = 
$@"insert into {mysql_connection_string}.社員マスタ_accdb
	select * from 社員マスタ";

					Console.WriteLine(query);

					try
					{
						// コマンドオブジェクトに接続をセット
						command.Connection = accdb;
						command.CommandText = query;
						command.ExecuteNonQuery();

						Console.WriteLine("エクスポートされました");
					}
					catch (Exception ex)
					{
						Console.WriteLine(query);
						Console.WriteLine("SQL 実行エラーです:" + ex.Message);
					}
				}
			}

			Console.ReadLine();
		}
	}
}


関連する記事

System.Data.OleDb で select into 構文を使って簡単に Microsoft Access のデータを他の データベースにエクスポートする

データーベース間 テーブルアクセス




posted by at 2019-08-14 01:35 | C# | このブログの読者になる | 更新情報をチェックする

2019年08月12日

C# : TKMP.DLLを使った、Gmail 用メール送信テンプレート

Gmail 用テンプレート




Gmail は、安全性の低いアプリの許可を『有効』にする必要があります。( 使用した後は無効にしましょう )
using System;
using System.Windows.Forms;
using TKMP.Net;

namespace TKMP_SendMail_Gmail
{
	public partial class Form1 : Form
	{
		public Form1()
		{
			InitializeComponent();
		}

		private void button1_Click(object sender, EventArgs e)
		{

			MailClass mc = new MailClass()
			{
				SmtpServer = "smtp.gmail.com",
				Port = 587,
				User = "アカウント",
				Pass = password.Text,
				Protocol = AuthenticationProtocols.TLS
			};

			var result = mc.SendMail(
				"宛先",
				"自メールアドレス",
				this.subject.Text,
				this.body.Text,
				null,   // 必要な場合、宛先を日本語で
				null,   // 必要な場合、差出人を日本語で
				(MailClass.MailClassErrorArg _e) =>
				{
					this.error.Text = _e.Message;
				}
			);

			if (result)
			{
				MessageBox.Show("メールを送信しました");
			}

		}

	}
}


TKMP を使用した MailClass
using System;
using TKMP.Writer;
using TKMP.Net;

namespace TKMP_SendMail_Gmail
{
	class MailClass
	{
		private MailWriter mailWriter = null;

		public string SmtpServer { get; set; }
		public int Port { get; set; }
		public string User { get; set; }
		public string Pass { get; set; }
		public AuthenticationProtocols Protocol { get; set; }

		private string err_message = "";

		public class MailClassErrorArg
		{
			public string Message { get; set; }
		}

		public delegate void MailClassError(MailClassErrorArg e);

		public bool SendMail(string To, string From, string Subject, string Body, string To_J, string From_J, MailClassError mailClassError)
		{
			bool bResult = true;

			mailWriter = new MailWriter();

			try
			{
				mailWriter.ToAddressList.Add(To);
			}
			catch (Exception ex)
			{
				bResult = false;
			}

			// エラー処理
			if (!bResult)
			{
				if (mailClassError != null)
				{
					MailClassErrorArg e = new MailClassErrorArg() { Message = "宛先が正しくありません" };
					mailClassError(e);
				}
				return bResult;
			}

			// From が未指定や正しくない文字列の場合
			try
			{
				mailWriter.FromAddress = From;
			}
			catch (Exception ex)
			{
				mailWriter.FromAddress = "______@gmail.com";
			}

			TextPart textPart = new TextPart(Body);
			mailWriter.MainPart = textPart;

			if (To_J != null)
			{
				mailWriter.Headers.Add("To", To_J + " <" + To + ">");
			}
			else
			{
				mailWriter.Headers.Add("To", To);
			}

			if (From_J != null)
			{
				mailWriter.Headers.Add("From", From_J + " <" + From + ">");
			}
			else
			{
				mailWriter.Headers.Add("From", From);
			}

			mailWriter.Headers.Add("Subject", Subject);
			mailWriter.Headers.Add("X-Mailer", "TKMP Version 3.1.2");

			var logon = new TKMP.Net.AuthLogin(User, Pass);
			SmtpClient smtpClient = new SmtpClient(SmtpServer, Port, logon);
			smtpClient.AuthenticationProtocol = Protocol;

			try
			{
				if (!smtpClient.Connect())
				{
					err_message = "接続に失敗しました";
					bResult = false;
				}
				else
				{
					smtpClient.SendMail(mailWriter);
					smtpClient.Close();
				}
			}
			catch (Exception ex)
			{
				err_message = ex.Message;
				bResult = false;
			}

			// エラー処理
			if (!bResult)
			{
				if (mailClassError != null)
				{
					MailClassErrorArg e = new MailClassErrorArg() { Message = err_message };
					// このメソッドの引数である、ErrorHandler デリゲートを呼び出す
					mailClassError(e);
				}
			}

			return bResult;
		}

		// エラー処理なし
		public bool SendMail(string To, string From, string Subject, string Body, string To_J, string From_J)
		{
			return SendMail(To, From, Subject, Body, To_J, From_J, null);
		}

		// 日本語なし、エラー処理なし
		public bool SendMail(string To, string From, string Subject, string Body)
		{
			return SendMail(To, From, Subject, Body, null, null, null);
		}

	}

}




posted by at 2019-08-12 21:59 | C# | このブログの読者になる | 更新情報をチェックする

C# : DataGridView を使用したナチュラルな行データの更新

DataGridView のセルをダブルクリックして編集可能にして、編集後更新ボタンで更新されます。







using System;
using System.Data;
using System.Data.Odbc;
using System.Windows.Forms;

namespace MySQL_DataGridView
{
	public partial class Form1 : Form
	{
		// *****************************
		// SQL文字列格納用
		// *****************************
		private string query = "select * from 社員マスタ";

		// *****************************
		// 接続文字列作成用
		// *****************************
		private OdbcConnectionStringBuilder builder = new OdbcConnectionStringBuilder();

		// *****************************
		// コンストラクタ
		// *****************************
		public Form1()
		{
			InitializeComponent();

			setBuilderData();
		}

		// *****************************
		// 接続文字列の準備
		// *****************************
		private void setBuilderData()
		{
			// ドライバ文字列をセット ( 波型括弧{} は必要ありません ) 
			// builder.Driver = "MySQL ODBC 8.0 Unicode Driver";
			builder.Driver = "MySQL ODBC 5.3 Unicode Driver";

			// 接続用のパラメータを追加
			builder.Add("server", "localhost");
			builder.Add("database", "lightbox");
			builder.Add("uid", "root");
			builder.Add("pwd", "");
		}

		// *****************************
		// 参照実行用クリックイベント
		// *****************************
		private void select_Click(object sender, EventArgs e)
		{
			loadMySQL();
		}

		// *****************************
		// SELECT 文よりデータ表示
		// *****************************
		private void loadMySQL()
		{

			// 接続と実行用のクラス
			using (OdbcConnection connection = new OdbcConnection())
			using (OdbcCommand command = new OdbcCommand())
			{
				// 接続文字列
				connection.ConnectionString = builder.ConnectionString;

				try
				{
					// 接続文字列を使用して接続
					connection.Open();
				}
				catch (Exception ex)
				{
					MessageBox.Show(ex.Message);
					return;
				}

				// コマンドオブジェクトに接続をセット
				command.Connection = connection;
				// コマンドを通常 SQL用に変更
				command.CommandType = CommandType.Text;

				// *****************************
				// 実行 SQL
				// *****************************
				command.CommandText = query;

				try
				{
					// レコードセット取得
					using (OdbcDataReader reader = command.ExecuteReader())
					{
						// データを格納するテーブルクラス
						DataTable dataTable = new DataTable();
						// DataReader よりデータを格納
						dataTable.Load(reader);

						// 画面の一覧表示用コントロールにセット
						dataGridView_Syain.DataSource = dataTable;

						// データがあった場合は更新ボタンを使用可能にする
						if ( dataTable.Rows.Count != 0 )
						{
							// 更新ボタン
							update.Enabled = true;
						}

						// リーダを使い終わったので閉じる
						reader.Close();
					}

				}
				catch (Exception ex)
				{
					// 接続解除
					connection.Close();
					MessageBox.Show(ex.Message);
					return;
				}

				// 接続解除
				connection.Close();
			}

			// カラム幅の自動調整
			dataGridView_Syain.AutoResizeColumns();
		}


		// *****************************
		// 更新実行用クリックイベント
		// *****************************
		private void update_Click(object sender, EventArgs e)
		{
			using (OdbcConnection connection = new OdbcConnection())
			{
				// 接続文字列
				connection.ConnectionString = builder.ConnectionString;

				// 更新を管理するクラス
				// ※ 更新するには、テーブルに主キーが必要です
				OdbcDataAdapter adapter = new OdbcDataAdapter();
				// 参照用のマップを追加
				adapter.TableMappings.Add("Table", "社員マスタ");
				// 接続とコマンド( コマンドは更新用のレコードを取得した SQL ) 
				adapter.SelectCommand = new OdbcCommand(query, connection);

				// 更新用のオブジェクトを準備
				OdbcCommandBuilder commandBuilder = new OdbcCommandBuilder(adapter);
				// 更新用のコマンドを取得
				adapter.UpdateCommand = commandBuilder.GetUpdateCommand();

				// 更新用 SQL のベース文字列
				Console.WriteLine(adapter.UpdateCommand.CommandText);

				// *****************************
				// 更新
				// *****************************
				try
				{
					// DataGridView の内容を使用して更新
					// ※ 他で更新されてしまった行は更新エラーとなります
					// ※ 内部で管理された更新予定行を対象として更新します
					adapter.Update((DataTable)dataGridView_Syain.DataSource);

					MessageBox.Show("更新を終了しました");
				}
				catch (Exception ex)
				{
					MessageBox.Show(ex.Message);
				}
			}
		}
	}
}


列定義を自分で作成する場合は以下を参照してください

Microsoft Access に対してSQLを入力してその結果を DataGridView に表示する最も簡単なコード




posted by at 2019-08-12 19:49 | C# | このブログの読者になる | 更新情報をチェックする

2019年06月27日

C# の delegate : メソッドの引数にメソッドを渡して使用する方法と、JavaScript の function(){} と同じ使用方法( 匿名 )

要するに関数型の変数の宣言。

private delegate void func(string a);

で、func という型が定義されて、func a という変数 a は、『引数が string 型で、戻り値が無い』という定義がされているメソッドであればなんでも良いという事。

メソッドを代入された変数はそのメソッドの代用になり、そのままメソッドとして使用できるようになるが、変数なので、内容を変更もできるし(他のメソッドとして入れ替え可能)、引数にも使用できる。( もちろん最初のメソッド名も引数として渡せるが、変数では無いので中身を変更はできない )

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;

namespace WindowsFormsApplication1
{

    public partial class Form1 : Form
    {
        // ▼ 宣言
        private delegate void func(string a);

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {

            // ▼ 呼び出しタイプ1( 特定メソッド型変数にメソッド名を代入 )
            func _ptr = debug_string;
            button_action(_ptr);

            // ▼ 呼び出しタイプ2( 古い方法 )
            button_action(new func(debug_string));

            // ▼ 匿名処理1( ラムダ式 ) : button_action 内より呼び出される
            button_action((string a) => { Debug.WriteLine(a); });

            // ▼ 匿名処理2: button_action 内より呼び出される
            button_action(delegate(string a) { Debug.WriteLine(a); });
           
        }

        private void button_action(func ptr)
        {
            // 変数を使ってメソッドを呼び出す
            // ( 呼び出しタイプ1と2では debug_string が呼び出される )
            // ( 匿名処理1と2では そこに書いた別々のコードが呼び出される )
            ptr("デバッグを呼び出す");
        }

        private void debug_string(string a)
        {
            Debug.WriteLine(a);
        }
    }
}

※ 呼び出しタイプ2/匿名処理1/匿名処理2
方法 : デリゲートを宣言し、インスタンス化して使用する

リンク先によると、『new func(debug_string)』は一番古い書き方で、その次に『debug_string』というメソッド名を直接セットするようになっていますが、さらに『delegate』を使って匿名の処理をその場で書く事ができるようになっています。

そしてさらに最新の書き方が『ラムダ式』で、 (引数) => {処理;処理;} というような書き方が可能になっています。

ラムダ式 (C# プログラミング ガイド)


posted by at 2019-06-27 19:32 | C# | このブログの読者になる | 更新情報をチェックする

2018年10月28日

PowerShell 移行用 C# コンソールアプリのコードテスト( ZIP 圧縮 )

▼ とてもお世話になっています
ZipFile、ZipArchiveクラスを使用して、ZIP圧縮、展開(解凍)、リスト表示などを行う( dobon.net )

この方法ですと、画像関連で Thumbs.db が書庫に入ってしまいますが、仕方ないです。

public class MyClass のほうを、PowerShell に書いて [MyClass]::create_zip() で実行します。
using System;
using System.IO;
using System.IO.Compression;

namespace create_zip {
	class Program {

		static void Main(string[] args) {

			MyClass.create_zip(args[0], args[1]);

		}
	}

	public class MyClass {
		public static void create_zip(string dir, string zipPath) {

			Console.WriteLine(dir);

			if (File.Exists(zipPath)) {
				File.Delete(zipPath);
			}

			try {
				ZipFile.CreateFromDirectory(
							dir,
							zipPath
						);
			}
			catch (Exception ex) {

				Console.WriteLine(ex.Message);
			}

		}

	}
}


▼ 久しぶりに使うとタブの設定や中かっこの設定を忘れていた。
 

# バッチファイルからの引数
$dir = $Args[0]
$zipPath = $Args[1]

$code = @"
using System;
using System.IO;
using System.IO.Compression;

public class MyClass {
	public static void create_zip(string dir,string zipPath) {

		Console.WriteLine(dir);

		if (File.Exists(zipPath)) {
			File.Delete(zipPath);
		}

		try {
			ZipFile.CreateFromDirectory(
						dir,
						zipPath
					);
		}
		catch (Exception ex) {

			Console.WriteLine(ex.Message);
		}

	}

}
"@

Add-Type -Language CSharp -TypeDefinition $code -ReferencedAssemblies `
	( `
	"System.IO.Compression.FileSystem" `
	)

# 実行
[MyClass]::create_zip($dir,$zipPath)





posted by at 2018-10-28 19:08 | C# | このブログの読者になる | 更新情報をチェックする

2017年12月07日

解く事が目的では無い、身に付ける事が目的の C# 初心者用の問題を作ったので良かったらどうぞ (4)

Visual Studio

必要なウインドウを閉じてしまった場合、[     ] メニューの、ウインドウレイアウトのリセットを選択します。

デバッグの為に、ブレイクポイントをソースに設定するには、[     ] キーを使用します。

ブレイクポイントから一行づつ実行するには、[     ] キーを使用します。

[     ] ウインドウを使用すると、ブレークポイントで参照可能な変数を入力して内容を表示する事ができます

デザイナー表示をコードへ切り替えるのは、[     ] キーを使用します。SHIFT キーと同時に使用すると、コードからデザイナーへ表示を切り替える事ができます。

SQL

データーベースからデータを取り出すには、SQL 文を使用しますが、実際のデータを行単位で取り出す処理は [     ] 文という構文で行います。

この文は、列リストと対象テーブルと抽出条件を指定するのが一般的です。対象テーブルは、列リストの後ろに  [     ] キーワードを使い、さらにその後にテーブル名を指定します。

抽出条件は、テーブル名を指定した後、 [     ] キーワードを使い、その後に条件式を指定します。

抽出したデータが複数行の場合、[     ] 句を最後に追加してソートを行う事ができます。省略時は順ソートですが、ソートしたい列名の後に [     ] キーワードを書くと逆ソートされます

データの追加は、[     ] 文を使い、行の追加と言う形で一行づつ行います。対象テーブルは [     ] キーワードの後に記述して、次に対象となる列のリストを  (  ) の中にカンマで区切って並べます。それらの列に対してデータを記述するわけですが、データは [     ] キーワードを使用してから再び (  ) の中にカンマで区切って並べます。列リストデータリストの数は一致する必要があり、それぞれのデータ型に合わせたデータの記述をする必要もあります。

SQL の中での文字列の扱いは  [     ] という記号で文字列を挟んで表現します。数値はそのまま記述できますが、日付型は正しい日付文字列を文字列と同じ記号で挟む必要があります。SQL の中の値の部分は、上記のような記入方法の他に  [     ] と呼ばれる予約された処理を挿入することもできます

データの更新も行単位で [     ] 文を使って行います。対象テーブルは [     ] 文のすぐ後に続け、更新する列と代入する値のペアを SET キーワードの後にカンマで区切って並べます。

更新には条件を指定する事ができ、[     ] キーワードを使い、その後に条件式を指定します。この条件に一致した行は全て更新対象となり、条件に一致した行が無い場合はまったく更新されませんが、エラーとはなりません

推奨覚えろキーワード

cause [     ]

allow [     ]

modify [     ]

visible [     ]

opacity [     ]

show [     ]

position [     ]

search [     ]

column [     ]

row [     ]

exist [     ]

each [     ]

fill [     ]

multi [     ]

remove [     ]

delete [     ]

success [     ]

array [     ]

Initialize  [     ]

エイリアス [     ]

スコープ [     ]

メタデータ [     ]
関連する記事 解く事が目的では無い、身に付ける事が目的の C# 初心者用の問題を作ったので良かったらどうぞ (1) 解く事が目的では無い、身に付ける事が目的の C# 初心者用の問題を作ったので良かったらどうぞ (2) 解く事が目的では無い、身に付ける事が目的の C# 初心者用の問題を作ったので良かったらどうぞ (3)
タグ:C#
posted by at 2017-12-07 20:26 | C# | このブログの読者になる | 更新情報をチェックする

解く事が目的では無い、身に付ける事が目的の C# 初心者用の問題を作ったので良かったらどうぞ (3)

機能

メッセージボックスを表示するには、[     ]クラス(System.Windows.Forms名前空間)の[     ]メソッドを使用します。メッセージボックスは、エラーメッセージを表示したり、ユーザーに確認を求める時などに便利です。

文字列変数の text の中に "1000円の商品を12個買う" とセットしたい場合の記述を完成させて下さい
string text = string.Format("[          ]", 1000, 12);


コンボボックス

コンボボックスはとても便利で良く使用される複数の選択肢をエンドユーザに提供する事ができるコントロールです。但し、C# ではデフォルトで入力可能になっているので、画面上で定義した場合は最初に [     ]を、DropDownList に変更する必要があります。

コンボボックスに登録されるリストは、[     ] に 0 以上の整数をセットする事によってプログラムから変更する事ができます。また、-1 をセットすると未選択になるので注意して下さい(なにも指定しなければ未選択になります)。

コンボボックスの名前(Name)が comboBox1 の場合選択された時に表示している文字列は、[     ] から取得する事ができます。さらに、コンボボックスに登録されているリストの一覧は、[     ] から取得する事ができます。

実際に全てのリストの内容を取得するには、foreach を使って以下のように記述する事ができます
foreach (string item in comboBox1.[     ])
{
	Debug.WriteLine(item);
}
コンボボックスに登録されているリストの数は、[     ] から取得できるので、上記処理と同じ処理を for 文で以下のように記述する事ができます
for (int i = 0; i < comboBox1.[     ].[     ]; i++)
{
	Debug.WriteLine(comboBox1.[     ]);
}
テキストボックス テキストボックスはエンドユーザが情報をキーボードから入力する為に使用します。デフォルトでは一行のみの入力になりますが、複数行を入力可能にするには、[     ] を True にする必要があります。また、複数行の入力では、スクロールバーが必要になって来るので、[     ] に、Both をセットします。Both の他には、Vertcal(垂直) と Holizontal(水平) がありますが、Holizontal スクロールバーを実際に使うには、WordWrap を False にする必要があります 入力を不可能にする方法には、二通りあり、[     ] をFalse にするか、[     ] をTrue にします。後者は、入力不可にはなりますが、内容の選択やコピーは可能になります。 関連する記事 解く事が目的では無い、身に付ける事が目的の C# 初心者用の問題を作ったので良かったらどうぞ (1) 解く事が目的では無い、身に付ける事が目的の C# 初心者用の問題を作ったので良かったらどうぞ (2) 解く事が目的では無い、身に付ける事が目的の C# 初心者用の問題を作ったので良かったらどうぞ (4)
posted by at 2017-12-07 20:15 | C# | このブログの読者になる | 更新情報をチェックする

解く事が目的では無い、身に付ける事が目的の C# 初心者用の問題を作ったので良かったらどうぞ (2)

データ型 : 整数

C# で使用するデータ型は言語として一般的な基本データ型があります。その中でも最初に理解する必要があるのが、整数を表す [     ] 型です。これはクラスの定義としては、Int32 と言うクラスになりますが、C 言語と同じ表現で利用可能になっています。

この型は、計算に使用される基本的な型です。しかし、プログラミングでは表現として文字列としての見え方が必要になるので、この型を文字列型に変換して利用する必要が出て来ます。この場合、Int32 のメンバ(操作を定義した手続き)である[     ] メソッドを使用します。

さらに上記処理の逆の処理として、整数で表現された文字列を整数に変換する場合は、この型(クラス)の、[     ] メソッドに引数で文字列を渡して実行します。また、これは 静的メンバ でもあるので、 Int32 というクラスに対して一つだけ定義された、メモリ上常に存在するメソッドになります。

データ型 : 文字列

文字列変数が work とすると、work が null 以外の場合、文字列の文字数を知るには、work.[     ]  と記述して取り出す事ができます。そして、この文字数を使用して for 文によって一文字ずつ文字列を取得するコードは以下のようになります
string work = "日本語表示";

for (int i = 0; i < work.[     ]; i++)
{
	Debug.WriteLine(work.[     ](i,1));
}
C# では、文字列を表現するのにダブルクォーテーションを使用しますが、一般的な言語と同様に、\ 記号使用したエスケープシーケンスが使用可能ですが、見た目がわかり難いのが欠点です。しかし、C# では[     ] 記号をダブルクォーテーションの前に書く事によって、\ 記号を書かないそのままの文字で表現できます。例えば、Windows のパスの区切り文字である \ は、通常 \\ と書く必要がありますが、以下のように表現できます。
"C:\\Program Files\\Microsoft" と書く代わりに、[     ]"C:\Program Files\Microsoft" と書けます
文字列の連結には、[     ] 記号 が使用されます。同様の連結が、VBA では & が使われ、PHP では .(ピリオド)が使われますが、一般的にはこの記号です。文字列を指定した文字で分割するには、[     ] メソッドが使用されます。但し注意する必要があるのは、区切り文字の指定が文字なので、文字の指定には [     ] 記号を使用する必要があります 関連する記事 解く事が目的では無い、身に付ける事が目的の C# 初心者用の問題を作ったので良かったらどうぞ (1) 解く事が目的では無い、身に付ける事が目的の C# 初心者用の問題を作ったので良かったらどうぞ (3) 解く事が目的では無い、身に付ける事が目的の C# 初心者用の問題を作ったので良かったらどうぞ (4)
タグ:C#
posted by at 2017-12-07 20:04 | C# | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します