itpro-blogger
Amazon.co.jp ウィジェット
木曜日, 5月 22, 2008
[C#]構造体
▼質問
構造体(struct)で作成した変数を関数に渡してその中身をその関数の中で取得して
データを取得したいんだけど・・・うまく値がセットされないんだ!?
どうしてだい?
▼回答
C#のstructは、C/C++のstructとは違うものなんだ。
C#での構造体は、値型でクラスは、参照型なんだ。
値型とは、情報を引き渡すときに情報をコピーする方式のデータ型である。
参照型とは、データの実体がある場所を保存しておき、情報を引き渡す必要がある場合は、
データの本体をコピーせず、データの場所だけを伝えるという方式である。
構造体で参照渡しをしたい時は、関数の引数と呼び出し側の引数に「ref」を付けるんだ。
public struct ユーザ定義名
{
public int num;
public string name;
}
public void Test( ref ユーザ定義名 user )
{
user.num = 1;
user.name = "テスト";
}
ユーザ定義名 getUser;
Test( ref getUser );
■参考サイト
@IT:連載 改訂版 C#入門 第5章 C#のデータ型
http://www.atmarkit.co.jp/fdotnet/csharp_abc2/csabc2_005/cs2_005_03.html
青島のしま~Blue Islands~ : .NET Tips
http://www.takebay.net/~daigo-ao/paddlewiki.pl/title_2E4E45542054697073.html
#
posted by itpro-blogger @ 6:55 午後
0 comments
水曜日, 5月 21, 2008
[C#]object型のキャスト
▼質問
次のプログラムで 「指定されたキャストは有効ではありません。」のエラーが出る。どうして?
string sql = "SELECT * FROM テーブル名";
OracleDataAdapter objAdapter;
objAdapter = new OracleDataAdapter(sql, objOraConn);
DataSet objOraDataSet;
objOraDataSet = new DataSet("objDataSet");
// Fill the DataSet
objAdapter.Fill(objOraDataSet, "テーブル名");
DataRow objRow = objOraDataSet.Tables[0].Rows[0];
int val = (int)objRow["フィールド名"]; ← ここでエラー
▼回答
次の2つを使い分けてやればOK?!
Convert.ToInt32(objRow["フィールド名"]);
((IConvertible)objRow["フィールド名"]).ToInt32(null);
■参考サイト
object型のキャストについて: DOBON.NETプログラミング掲示板過去ログ
http://dobon.net/vb/bbs/log3-16/9607.html
#
posted by itpro-blogger @ 8:59 午後
0 comments
日曜日, 5月 18, 2008
[VB→C#]My.Computer.FileSystem関連
▼質問
「My.Computer.FileSystem」関連の処理をVBからC#に移植しようと思うんだが・・・。
うまくいかないんだ。
▼回答
「My.Computer.FileSystem」を「Microsoft.VisualBasic.FileIO」に変換すれば問題ないよ。
名前空間のインポートに「Microsoft.VisualBasic.FileIO」を宣言すると次のエラーになる。
「エラー 1 'FileSystem' は、'Microsoft.VisualBasic.FileIO.FileSystem' と 'Microsoft.VisualBasic.FileSystem'' 間のあいまいな参照です。 ファイルパス」
「'Microsoft.VisualBasic」と「Microsoft.VisualBasic.FileIO」は共存できないようだ。
そこで考えた。
名前空間のインポートに「using FileIO = Microsoft.VisualBasic.FileIO;」を宣言して、
「My.Computer」を「FileIO」に変換すれば問題ないことがわかった。
#
posted by itpro-blogger @ 9:12 午前
0 comments
土曜日, 5月 17, 2008
[VB→C#]INIファイル関連(WIN32API)
▼質問
INIファイル関連の関数宣言を教えてくれ!
▼回答
サンプルを示しておくから参考にしてくれ!!
[VB]
' INIファイルから値を取得する関数の宣言
Public Declare Auto Function GetPrivateProfileString Lib "kernel32" _
Alias "GetPrivateProfileString" ( _
ByVal lpApplicationName As String, _
ByVal lpKeyName As String, _
ByVal lpDefault As String, _
ByVal lpReturnedString As StringBuilder, _
ByVal nSize As UInt32, _
ByVal lpFileName As String) As UInt32
' INIファイルから値を取得する関数の宣言
Public Declare Auto Function GetPrivateProfileInt Lib "kernel32" _
Alias "GetPrivateProfileInt" ( _
ByVal lpApplicationName As String, _
ByVal lpKeyName As String, _
ByVal intDefault As Integer, _
ByVal lpFileName As String) As UInt32
' INIファイルに値を設定する関数の宣言
Public Declare Auto Function WritePrivateProfileString Lib "kernel32" _
Alias "WritePrivateProfileString" ( _
ByVal lpApplicationName As String, _
ByVal lpKeyName As String, _
ByVal lpString As String, _
ByVal lpFileName As String) As UInt32
[C#]
// INIファイルから値を取得する関数の宣言
[DllImport("kernel32.dll")]
public static extern uint GetPrivateProfileString(
string lpAppName,
string lpKeyName,
string lpDefault,
StringBuilder lpReturnedString,
uint nSize,
string lpFileName);
// INIファイルから値を取得する関数の宣言
[DllImport("kernel32.dll")]
public static extern uint GetPrivateProfileInt(
string lpAppName,
string lpKeyName,
int nDefault,
string lpFileName);
// INIファイルに値を設定する関数の宣言
[DllImport("kernel32.dll")]
public static extern uint WritePrivateProfileString(
string lpAppName,
string lpKeyName,
string lpString,
string lpFileName);
#
posted by itpro-blogger @ 9:27 午後
0 comments
[C#]VBからの移植でのエラー
▼質問
VBからC#に移植しているんだけど。
次のコードで、次のエラーが出るんだ。どういう意味なのかな?
DataSet objDataSet = new DataSet("objDataSet");
~ 略 ~
DataRow objRow = objDataSetOra.Tables(0).Rows(0);
「エラー 1 'System.Data.DataSet.Tables' は 'プロパティ' ですが、'メソッド' のように使用されています。 ファイルパス」
▼回答
VBとC#で配列の文法が違うから気を付けた方がいいよ。
DataRow objRow = objDataSetOra.Tables[0].Rows[0];
▼質問
次のエラーが出るんだ。
「エラー 1 'objRow' は '変数' ですが、'メソッド' のように使用されています。 ファイルパス」
▼回答
これも、上記の回答と同じだよ。
#
posted by itpro-blogger @ 7:41 午前
0 comments
[C#]型変換(キャスト)
▼質問
次のプログラムで
public string cnvString(double data) {
return data.ToString();
}
下記のエラーになるんだ。どうしてなんだ?
「エラー 1 メソッド グループ 'ToString' を非デリゲート型 'string' に変換することはできません。このメソッドを呼び出すことはできません。 ファイルパス」
次の様にするとエラーは出なくなるんだ。何か違う気がする・・・。
public string cnvString(double data) {
string s = data.ToString();
return s;
}
▼回答
VBやC言語で言う共通関数(値を渡して結果を返すだけの処理)のようなものならstaticを
付けてあげれば問題ないと思うよ。
public static string cnvString(double data) {
return data.ToString();
}
静的変数・静的メソッドはクラスごとに唯一つの実体を持ち、すべてのオブジェクトの間で共有される。
また、数学関数や数学定数などのインスタンスを持つ必要のない関数を定義する場合にも使う。
クラス内に処理実態とデータが含む場合はstaticにしてはいけない。
■参考サイト
静的変数・静的メソッド(C# によるプログラミング入門)
http://ufcpp.net/study/csharp/oo_static.html
#
posted by itpro-blogger @ 12:03 午前
0 comments
金曜日, 5月 16, 2008
[C#]Oracle参照エラー
▼質問
下記のエラーが出るんだ。どうしたらいいんだ?!
「エラー 1 型または名前空間名 'Oracle' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。 ファイルパス」
▼回答
ソリューション エクスプローラの参照設定から次の手順で設定するんだ。
参照設定を選択し、プロパティウィンドウ(右クリック)から「参照の追加」を選択するんだ。
「.NET」タブからコンポーネント名「Oracle.DataAccess」を選んで「OK」をクリックして終了だ。
ODP.NETのインストールとバージョンに注意してくれ!
■参考サイト
Oracle 散策
http://www.okisoft.co.jp/esc/db/ora04.html
#
posted by itpro-blogger @ 9:43 午後
0 comments
[C#]デファイン or インクルード
▼質問
デファイン(#define)を定義するインクルードファイル(ヘッダファイル)ってないの?
▼回答
C#には、拡張子が(.h)のようなヘッダファイル(インクルード)は存在しないよ。
■参考サイト
C# 言語と .NET Framework の概要
http://msdn.microsoft.com/ja-jp/library/z1zx9t92(VS.80).aspx
#
posted by itpro-blogger @ 8:34 午後
0 comments
[C#]C#の日付型
▼質問
C#にDate型はないの?
▼回答
Date型はないけど日付型を扱うにはSystem名前空間にあるDateTime型を使うんだ。
使用方法には、次に上げる2通りがあるぞ!
プログラムの最初で「using System;」と宣言する方法と、
プログラムの中で「System.DateTime」とする方法だ。
前者の方が、プログラムがスッキリして一般的に使われる
方法だと思うから、その方法をお勧めするよ!
#
posted by itpro-blogger @ 6:38 午後
0 comments
木曜日, 5月 15, 2008
[C#]VBからC#への移植方法
■VBからC#への移植方法
1.「’(シングルコーテイション)」を置換で「//(ダブルスラッシュ)」にする。
2.「Imports」を「using」に変換し、行の最後に「;(セミコロン)」を付ける。
3.「Public」を「public」に「Private」を「private」に置換する。
4.「Public Class クラス名 ~ End Class」を「public class クラス名 { ~ }」にする。
5.「Public Enum 列挙名 ~ End Enum」を「public enum 列挙名 { ~ }」にし、列挙子の間を
「,(カンマ)」で区切る。
6.「Public Structure 構造体名 ~ End Structure」を「public struct 構造体名 { ~ }」にし、
メンバの型を次の様に変換する。
Public 変数名 As Integer → public int 変数名;
Public 変数名 As String → public string 変数名;
Public 変数名 As Long → public long 変数名;
Public 変数名 As Double → public double 変数名;
Public 変数名 As Boolean → public bool 変数名;
Public 変数名 As Date → public System.DateTime 変数名;
7.コンストラクタ「Sub New() ~ End Sub」を「public クラス名() { ~ }」にする。
8.下記の様に置換する。
「New」 → 「new」
「True」 → 「true」
「False」 → 「false」
「.ToString」 → 「.ToString()」
「Try ~ Catch ex As Exception ~ Finally ~ End Try」 →
「try { ~ } catch (Exception ex) { ~ } finally { ~ }」
※注意:using Systemが必要!
「GoTo」 → 「goto」
「Nothing」 → 「null」
9.「IsDBNull」関数を下記に置き換え実装する。
public static bool IsDBNull(object data)
{
これよくなかった!
if (data == null) return true;
return false;
return Microsoft.VisualBasic.Information.IsDBNull(data);
}
10.「Format」関数を下記に置き換え実装する。
public static string Format(object data, string format)
{
これ間違えだった!
return String.Format(format, data);
return Microsoft.VisualBasic.Strings.Format(data, format);
}
11.配列宣言の型を次の様に変換する。
「Dim val(2) As Integer」 → 「int[] val = new int[2];」
12.「Select Case 」文を次の様に変換する。
Select Case 変数名
Case 値
Case Else
End Select
switch ( 変数名 ) {
case 値:
default:
}
13.「For」文を次の様に変換する。
For i as Integer = 0 To 10
Next i
for ( int i = 0 ; i <= 10 ; i++ ) { } 14.「& _」を使った文字列の連結を「+」に変換する。 15.下記に示すものを削除し、プログラムの処理を変更する。 「On Error GoTo」 16.「Err.Number」を「Microsoft.VisualBasic.Information.Err().Number」とするか次の様にする。 ソリューション エクスプローラの参照設定から「参照の追加」より「Microsoft.VisualBasic」を 追加し、「Err.Number」を「Information.Err().Number」とする。 このやり方ではエラーの取得は駄目みたい(>_<)
17.定数宣言を次の様に変更する。
「Public Const 定数名 As Integer = 0」 → 「public const int 定数名 = 0」
18.VB定数を次の様に変更する。
「Chr(13)」 or 「vbCr」 → 「\r」 : キャリッジリターン文字
「Chr(10)」 or 「vbLf」 → 「\n」 : ラインフィード文字
「Chr(13) + Chr(10)」 or 「vbCrLf」 or 「vbNewLine」 → 「\r\n」 : キャリッジリターンとラインフィードの組合せ
「Chr(9)」 or 「vbTab」 → 「\t」 : タブ文字
「Chr(0)」 or 「vbNullChar」 or 「vbNullString」 → 「\0」 : 値 0 を持つ文字
「Chr(8)」 or 「vbBack」 → 「\b」 : バックスペース文字
#
posted by itpro-blogger @ 5:13 午後
0 comments
土曜日, 5月 10, 2008
[VB2005]コントロールを名前で探す
▼質問
コントロールを名前で探すにはどうしたらいいんだい。
▼回答
次の様にすれば直接コントロールを操作できるようになるよ。
CType(Me.Controls.Find(名前, True)(0), コントロール名)
■参考サイト
VB.NET - フォーム内のコントロールを名前で探して取得する
http://jeanne.wankuma.com/tips/vb.net/form/findcontrol.html
#
posted by itpro-blogger @ 8:11 午後
0 comments
金曜日, 5月 09, 2008
[VB2005]別ウィンドウ(別EXE)の最前面表示
▼質問
別ウィンドウ(別EXE)で起動したアプリを最前面に表示したいんだ。どうしたらよいのか?
▼回答
次のAPIを使えばできるぞ!
API名は『BringWindowToTop』だ。
次にサンプルを示しておくから参考にしてくれ!!
'ウィンドウを最前面に表示する関数宣言
Declare Function BringWindowToTop Lib "user32.dll" Alias "BringWindowToTop" (ByVal hWnd As Int32) As Int32
'最上位フォーム設定解除
Me.TopMost = False
'プロセスを起動する.
prs = Process.Start(起動EXEパス, パラメータ)
'最上位フォーム設定
BringWindowToTop(CInt(prs.MainWindowHandle))
prs.WaitForExit()
prs.Dispose()
prs.Close()
'最上位フォーム設定
Me.TopMost = True
#
posted by itpro-blogger @ 1:50 午後
0 comments
木曜日, 5月 01, 2008
[VBA]QueryTable
▼質問
Oracleからのデータバックアップで次のプログラムで実行しているんだが・・・。
「Selection.QueryTable.Refresh BackgroundQuery:=False」
どうやってODBCやSQL文の設定をしているかわからん!?
教えてくれ~!!
▼回答
一度「外部データの取込み」をやると、その時の操作が設定してしまい
変更ができないみたいなんだ。
だから、汎用的にやるには次のプログラムがお勧めだよ!?
With Worksheets(シート名).QueryTables.Add(Connection:="ODBC;DSN=データソース名;UID=ユーザ名;PWD=パスワード名", Destination:=Worksheets(シート名).Range("A1"))
.Sql = Array("SELECT * FROM テーブル名")
.Refresh
End With
#
posted by itpro-blogger @ 11:31 午後
0 comments
自己紹介
名前:
itpro-blogger
詳細プロフィールを表示
Links
Google News
Edit-Me
Edit-Me
archives
5月 2005
6月 2005
7月 2005
8月 2005
9月 2005
10月 2005
11月 2005
12月 2005
1月 2006
2月 2006
3月 2006
4月 2006
5月 2006
6月 2006
7月 2006
8月 2006
9月 2006
10月 2006
11月 2006
12月 2006
1月 2007
2月 2007
3月 2007
4月 2007
5月 2007
6月 2007
7月 2007
8月 2007
9月 2007
10月 2007
11月 2007
12月 2007
1月 2008
2月 2008
3月 2008
4月 2008
5月 2008
6月 2008
7月 2008
8月 2008
9月 2008
10月 2008
11月 2008
12月 2008
1月 2009
2月 2009
3月 2009
4月 2009
5月 2009
6月 2009
7月 2009
8月 2009
9月 2009
10月 2009
11月 2009
12月 2009
1月 2010
2月 2010
3月 2010
4月 2010
5月 2010
6月 2010
7月 2010
8月 2010
9月 2010
10月 2010
11月 2010
12月 2010
1月 2011
2月 2011
3月 2011
4月 2011
6月 2011
12月 2011
5月 2012
3月 2015
9月 2015
6月 2019
7月 2019
6月 2020
10月 2022