トップページ⇒tech
1001コメント291KB

ふらっとC#,C♯,C#(初心者用) Part21

■ このスレッドは過去ログ倉庫に格納されています
0001ななしぃ#2007/11/18(日) 15:53:41
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。

前スレ: ふらっとC♯, C#(初心者用) Part20
http://pc11.2ch.net/test/read.cgi/tech/1191036844/
0032302007/11/20(火) 15:44:04
>>31
ありがとうございました
0033デフォルトの名無しさん2007/11/20(火) 16:16:05
ConvertAllでいいだろ多分。
0034デフォルトの名無しさん2007/11/20(火) 16:18:57
byte[] bytesData = System.Text.Encoding.UTF8.GetBytes("A");
string[] str = new string[26];

for (int i = 0; i < 26; i++)
{
bytesData[0] + i;
str[i] = System.Text.Encoding.UTF8.GetString(bytesData);
}
0035デフォルトの名無しさん2007/11/20(火) 17:07:52
なんつーことを…
0036デフォルトの名無しさん2007/11/20(火) 18:52:16
まさに外道
0037デフォルトの名無しさん2007/11/20(火) 19:14:11
byte[] bytesData = System.Text.Encoding.UTF8.GetBytes("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
string[] str = new string[26];

for (int i = 0; i < 26; i++)
{
str[i] = System.Text.Encoding.UTF8.GetString(bytesData[i]);
}
0038デフォルトの名無しさん2007/11/20(火) 19:16:46
冗談はこの辺にして。
string[] strWord = { "A","B","C"};
0039デフォルトの名無しさん2007/11/20(火) 22:08:50
>>26
それがなぜエラーになるか、わかれば少しレベルアップできますよ。
0040デフォルトの名無しさん2007/11/21(水) 10:53:34
ACB→YAZのようにずらして表示させたいんですけど
どうやったらできますかね?
0041デフォルトの名無しさん2007/11/21(水) 11:08:21
どうずらすの?
0042デフォルトの名無しさん2007/11/21(水) 11:09:27
GetByte か アルファベット全体の配列を持つ
0043デフォルトの名無しさん2007/11/21(水) 11:21:28
string ShiftLeft2( string str )
{
    const char DEF = (char)( 'Z' - 'A' + 1 );
    const char def = (char)( 'z' - 'a' + 1 );

    StringBuilder sb = new StringBuilder( str.Length );
    for( int i = 0; i < str.Length; i++ )
    {
        char ch = str[i];
        if( 'A' <= ch && ch <= 'Z' )
        {
            ch = (char)( ch - 2 );
            if( ch < 'A' )
                ch = (char)( ch + DEF );

        }
        else if( 'a' <= ch && ch <= 'z' )
        {
            ch = (char)( ch - 2 );
            if( ch < 'a' )
                ch = (char)( ch + def );
        }
        sb.Append( ch );
    }
    return sb.ToString();
}
0044402007/11/21(水) 11:25:23
ありがとうございます
やってみます
0045デフォルトの名無しさん2007/11/21(水) 18:01:46
enumをintにするには、ただ単にintでキャストして、(int)Enum.Instanceとするだけで、
0から順番にintに出来ると思うのですが、逆は簡単に出来るのでしょうか?
swich(num)で場合分けしてintからenumの文字列を得るしかないのでしょうか?
0046デフォルトの名無しさん2007/11/21(水) 18:58:25
>>45
Enum.GetName()
0047デフォルトの名無しさん2007/11/21(水) 19:02:15
>>46
どうも有り難うございます〜。お手数お掛けしてすみませんでした。
Enum.GetName(typeof(enum), int);
0048デフォルトの名無しさん2007/11/21(水) 19:43:13
(num as enum).ToString()
0049デフォルトの名無しさん2007/11/21(水) 19:50:36
逆も普通に列挙体の型にキャストするだけだけど
なんで文字列とかそういう話になるの?
0050デフォルトの名無しさん2007/11/21(水) 19:51:55
あひょっとして((enum)num).ToString()じゃないと駄目だったかな?
0051デフォルトの名無しさん2007/11/21(水) 19:53:34
>>48はコンパイル通らないけど
参照型でも普通>>48みたいなasの使い方はしないよ
asはnullチェックとセットじゃないと意味がない
失敗したときわかりにくいし
0052デフォルトの名無しさん2007/11/21(水) 19:56:56
>>48
それは、最初、直感的にやってみてエラーになったんですが、できるんでしょうか?
asオペレータは参照型で使用してくださいとなります。
enumは値型ですから駄目?
0053デフォルトの名無しさん2007/11/21(水) 21:08:11
短く書きたかっただけ、ちょっと勘違い(値型でもいけたかなと思ったけど、やっぱりで>>50)。
0054デフォルトの名無しさん2007/11/21(水) 22:28:51
フォーム上に配置されたコンポーネント(Component派生クラス)の内部から、
自分が配置されているフォームを取得することはできないでしょうか。

どうしても無理なら、カスタムデザイナを使って、フォームに配置されたときに
自動的にプロパティを設定するようなやり方にしようかと思っているのですが。
0055デフォルトの名無しさん2007/11/21(水) 22:39:11
FindForm
こんなVBっぽい機能使うなよw
0056デフォルトの名無しさん2007/11/21(水) 22:50:59
ComponentにFindFormなんてないだろ
0057デフォルトの名無しさん2007/11/22(木) 02:16:54
こっちじゃないだろうか?
ttp://msdn2.microsoft.com/ja-jp/library/system.windows.forms.control.parent(VS.80).aspx
0058デフォルトの名無しさん2007/11/22(木) 09:59:40
それは違う。
全然違うw
0059デフォルトの名無しさん2007/11/22(木) 11:17:27
string[] str = new string[50];
文字列配列が50個あって、これをカンマで全部つなげて文字列にしたいんだが、

string value = str[0] + ',' + str[1] + ',' + str[2] + ',' + str[3] + ・・・・・

これしか思いつかないんだorz
もうちょっとスッキリした書き方って何かありますか?
0060デフォルトの名無しさん2007/11/22(木) 11:20:37
string value = string.Join(",", str);
0061592007/11/22(木) 11:27:11
>>60
ありがとう、おかげさまでスッキリ書けました。大感謝です!!
0062デフォルトの名無しさん2007/11/22(木) 11:27:12
Join知らなくても、せめてforループくらい思いつかないと、配列の意味無いじゃん。
0063デフォルトの名無しさん2007/11/22(木) 13:06:58
FizzBuzzやらせたら面白いことになりそうだな。
0064デフォルトの名無しさん2007/11/22(木) 13:12:30
foreach(string st in str)
{
0065デフォルトの名無しさん2007/11/22(木) 13:22:35
+= じゃなくて StringBuilder を使ってくれるといいんだが。
0066デフォルトの名無しさん2007/11/22(木) 14:16:26
文字列だけの連結なら、StringBuilderより+演算子を使う方が速い。
必要なだけの文字列の長さを計算して、1回のピープ確保で済む。
0067デフォルトの名無しさん2007/11/22(木) 14:53:58
>>66
string value = "";
foreach (string s in str) {
  value += s;
}
は、まずいだろ。
0068デフォルトの名無しさん2007/11/22(木) 14:59:25
>>67
たぶん>>66は
string value = str[0] + ',' + str[1] + ',' + str[2] + ',' + str[3] + ・・・・・
これが高速だと言いたかったんだろ。

forループ回して+=で結合するのや
StringBuilder インスタンスのロスなどを考えても
今回の配列50個程度の文字列結合だと、
速度の点で言えばどの方法でも大差なさそうだけどね。

>>59の
string value = str[0] + ',' + str[1] + ',' + str[2] + ',' + str[3] + ・・・・・
見た目はカコワルイが、これが一番高速ってことかなwww
0069デフォルトの名無しさん2007/11/22(木) 15:10:11
joinでも変わらんだろ大して。
0070デフォルトの名無しさん2007/11/22(木) 15:14:33
総合的に一番ベストな回答はjoinだろ。
将来配列の個数が増えたときも対応が利くし
+=よりは速い。
そして何よりもスマートに記述できる。
0071デフォルトの名無しさん2007/11/22(木) 15:36:23
>これしか思いつかないんだ
すまんすまん、60=62だが、ここに突っ込んだんだよw
0072デフォルトの名無しさん2007/11/22(木) 15:45:35
一時StringBuilderより+利用時の暗黙の配列の方が重かったりしてw
0073デフォルトの名無しさん2007/11/22(木) 16:03:11
タブコントロール内にタブページが3ページあります。
3ページ目の中にはDataGridViewがあります。

タブページ外のボタン(タブコントロールと同じフォーム内)を
クリックしたときに、3ページ目のコピーを4ページ目として、
新たにタブページを作成するメソッドって何かありませんか?

0074732007/11/22(木) 16:11:41
ちょっと聞き方に問題ありました、すみません。
>新たにタブページを作成するメソッドって何かありませんか?
新たにタブページを作成するスマートな方法をご存知ないですか?
に訂正します。
0075デフォルトの名無しさん2007/11/22(木) 17:13:26
DataGridView にどんなデータが入ってるか知らんから
データ舐めて新規につくれとしか


>>66
                    ,ィ⊃  , -- 、
          ,r─-、      ,. ' /   ,/     }     ち
          {     ヽ  / ∠ 、___/    |
   署     ヽ.      V-─- 、  , ',_ヽ /  ,'      ょ
           ヽ  ヾ、  ',ニ、 ヽ_/ rュ、 ゙、 /
   ま        \  l  トこ,!   {`-'}  Y        っ
             ヽj   'ー'' ⊆) '⌒`  !
   で    , 、      l     ヘ‐--‐ケ   }        と
        ヽ ヽ.  _ .ヽ.     ゙<‐y′   /
   来     }  >'´.-!、 ゝ、_  ~  ___,ノ
         |    −!   \` ー一'´丿 \
   い    ノ    ,二!\   \___/   /`丶、
        /\  /    \   /~ト、   /    l \
0076732007/11/22(木) 17:26:01
>>75
すんません、説明不足でした。
DataGridViewのデータはコピーできなくてOKです。
3ページ目のDataGridViewの列タイトル・列幅など
プロパティのコピーができれば充分です。
何とかなりませんかね?
0077デフォルトの名無しさん2007/11/22(木) 17:52:25
>>75
それはピーポw
0078732007/11/22(木) 18:13:03
自己解決しますた。
DataGridView dgv = dgvLog; ← dgvLog:3ページ目のDataGridView
tabPage4.Controls.Add(dgv);

たぶんこれで問題ないと思われます。
0079732007/11/22(木) 18:18:44
↑78で解決できたと思ったんですが、
DataGridView dgv = dgvLog;
tabPage4.Controls.Add(dgv);
これを実行するとナゼか
3ページ目のDataGridViewが消えるorz
0080デフォルトの名無しさん2007/11/22(木) 18:45:22
>>79
当たり前w
試しに、
DataGridView dgv = new DataGridView();
して、それをAdd してみ。
0081デフォルトの名無しさん2007/11/22(木) 18:50:10
>>80
DataGridView dgv = new DataGridView();
DataGridView dgv = dgvLog;
tabPage4.Controls.Add(dgv);
このようにやっても3ページ目が消えます;;

どうやらdgvLogそのものをコピーするのは無理っぽいですね。。。
0082デフォルトの名無しさん2007/11/22(木) 19:03:58
クマー
0083デフォルトの名無しさん2007/11/22(木) 19:18:01
それコンパイルできんの?w
0084732007/11/22(木) 19:24:25
一応デバッグモードで動いてますが。。。
これって何かヤバい記述なのでしょうか?
超初心者ですみません;;
0085デフォルトの名無しさん2007/11/22(木) 20:34:49
C#のバージョンと.Netランタイムのバージョンの関係を教えてください。

C#3.0で開発するとクライアントでは.net3.0/3.5が必要なの?
.net2.0の開発にC#3.0は使えないんですか?
0086デフォルトの名無しさん2007/11/22(木) 20:41:28
LINQ使えないんじゃないの
0087デフォルトの名無しさん2007/11/22(木) 20:48:24
>>85
3.0/3.5で追加されたライブラリを使わなければ、
C# 3.0で追加された言語仕様を使っても.NET Framework 2.0で動くはず。
86も言っている通りLinqはだめだな。

まあ、こういうことも不可能ではないみたいだけど。
http://d.hatena.ne.jp/NyaRuRu/20071121
0088デフォルトの名無しさん2007/11/22(木) 23:09:27
>>85
C# 3.0というかVisual Studio 2008で書くと、常に.NET 2.0 SP1を想定してコンパイルする点は注意。
.NET 2.0→2.0 SP1でいくつか互換性が無くなる変更が行われているので、
それらの型やメソッドに依存してるプログラムは互換しない。
例
1) .NET 2.0にのみに存在し、SP1で無くなったメソッドを使っている
  →.NET 2.0 SP1環境で動かない、Visual Studio 2008ではコンパイルが通らない
2) .NET 2.0 SP1で追加されたメソッドを使っている
  →.NET 2.0無印環境で動かない、Visual Studio 2008ではコンパイルが通る
0089デフォルトの名無しさん2007/11/22(木) 23:34:22
構造体とクラスに関連してスタックとピープについて詳しいサイトありませんか、
0090デフォルトの名無しさん2007/11/22(木) 23:40:37
>>89
                    ,ィ⊃  , -- 、
          ,r─-、      ,. ' /   ,/     }     だ
          {     ヽ  / ∠ 、___/    |
   署     ヽ.      V-─- 、  , ',_ヽ /  ,'      か
           ヽ  ヾ、  ',ニ、 ヽ_/ rュ、 ゙、 /
   ま        \  l  トこ,!   {`-'}  Y       ら
             ヽj   'ー'' ⊆) '⌒`  !
   で    , 、      l     ヘ‐--‐ケ   } 
        ヽ ヽ.  _ .ヽ.     ゙<‐y′   /
   来     }  >'´.-!、 ゝ、_  ~  ___,ノ
         |    −!   \` ー一'´丿 \
   い    ノ    ,二!\   \___/   /`丶、
        /\  /    \   /~ト、   /    l \
   っ

   て
0091デフォルトの名無しさん2007/11/22(木) 23:49:13
おめぇはすっこんでろピー公
0092デフォルトの名無しさん2007/11/23(金) 00:14:57
SP1の変更点一覧てどこにあるのん?
0093デフォルトの名無しさん2007/11/23(金) 00:23:56
>>90
市ね糞が
0094デフォルトの名無しさん2007/11/23(金) 00:38:37
ところで、最近はヒープのことをピープって言うのが流行ってるのか?
0095デフォルトの名無しさん2007/11/23(金) 00:51:08
ビープ
0096デフォルトの名無しさん2007/11/23(金) 03:51:10
他スレでレスが付かなかったのですみませんが
ここのスレで質問させて下さい。
C#で下記VB6の処理と同じ事をしたいのですが、
VB6+DAO接続のようにうまくいきません。
(Oracleの社員マスタをmdbにインポートする)

Dim db1 As Database
'DSN接続文字列
Const DSN As String = _
"ODBC;DSN=abc;SRVR=orcl;UID=USER;PWD=Admin;"
'DAOでOracleに接続
Set db1 = Workspaces(0).OpenDatabase("", True, False, DSN)
Dim strSQL As String

’社員マスタのインポート
strSQL = "SELECT * INTO USER_SHAIN " & _
"IN '" & "C:\abc.mdb' from SHAIN"
db1.Execute strSQL

mdbにODBCでOracleにリンクして上記SQLを発行すれば
うまくいきそうなんですが
空のabc.mdbに直接Oracleのデータをインポートするには
C#+ADO.NETではやはり無理なのでしょうか?
VB+DAOでできてC#+ADO.NETではできないのは
何か悔しいです。



0097デフォルトの名無しさん2007/11/23(金) 06:54:06
>>96
そういうDAOべったりのことをしたいなら、C#からDAO使えばいいじゃね
0098デフォルトの名無しさん2007/11/23(金) 10:26:16
>>96
お前VB6のソース貼っただけで質問かよ


DAOでMDBへの接続ならこんなのがあった
http://park15.wakwak.com/~u-konko/denno/c_sample/ado.htm
0099デフォルトの名無しさん2007/11/23(金) 11:30:52
>>96
多種DB間での単一SQLって・・・
プログラム的には接続を別に持って
DB1からObjectとして取得
DB2へ取得Objectをインサート
がスマートなんじゃね?
0100デフォルトの名無しさん2007/11/23(金) 15:30:27
IEを監視してアクセスしたURLを取得したいのですが、どうアプローチすればいいでしょうか?

0101デフォルトの名無しさん2007/11/23(金) 15:39:20
Fiddler でも参考にしたら
0102デフォルトの名無しさん2007/11/23(金) 15:54:15
>>101
レスありがとうございます。
そのような感じではなくロガー用途で使いたいのです

ttp://mixlogger.the-ninja.jp/
このような感じです。

情報を小出しにしてしまい申し訳ありません。

プログラムは常駐していて、IEでなにかサイトにアクセスすると
URL、あとタイトルとアクセス時間をログにして出力すると考えています。
0103デフォルトの名無しさん2007/11/23(金) 19:19:55
プロキシかませれば?
0104デフォルトの名無しさん2007/11/23(金) 19:25:23
>>96
何が上手くいかないか書いていない。
c#上のコーディングミスの可能性があるのにソースが貼ってない。


それにもかかわらず
>C#+ADO.NETではやはり無理なのでしょうか?
なんだそれ?

ゆとり?
0105デフォルトの名無しさん2007/11/23(金) 20:09:47
いいえ、ケフィアです。
0106デフォルトの名無しさん2007/11/23(金) 20:41:21
>>105
この板で久しぶりにワラタwwwww
0107デフォルトの名無しさん2007/11/23(金) 22:32:59
俺には中学生のセンスにしか思えないけど。
まあプログラマって笑いのツボ(に限らないけど)が中学生な奴が多いのかもな。
0108デフォルトの名無しさん2007/11/23(金) 22:42:49
高二病患者乙
0109デフォルトの名無しさん2007/11/23(金) 23:02:54
string aとstring bがあってそれぞれ同一ドライブのディレクトリへの絶対パスが入っています。
aとbは親子の場合もあるしそうでないときもあります。

これをaからbへの相対パスに変更する簡単な方法はありますか?
0110デフォルトの名無しさん2007/11/23(金) 23:07:40
>>109
クイズ風に質問すな
0111デフォルトの名無しさん2007/11/23(金) 23:09:04
C# 相対パス
でググればいくらでもでてくるだろうに。
Uri.MakeRelativeUri
0112デフォルトの名無しさん2007/11/23(金) 23:23:06
ほとんどの文字列操作は大抵にAPIにあるし、
無くてもアルゴリズムを自作できる程度のものが多い。
0113デフォルトの名無しさん2007/11/23(金) 23:28:15
>>111
どうもありがとうございます。
Uriクラスとは気が付きませんでした・・
0114デフォルトの名無しさん2007/11/23(金) 23:33:41
シリアル通信の3ch同時受信のプログラムを組んでるのですが
RS232Cの通信というのはかなりのCPU負荷をかけるものなのでしょうか?
1chでの受信ではデータの取りこぼしもほとんどなく転送速度もそこそこ出ているのですが
3chでのプログラムではPentium MのPCでは動作が不安定になってしまいました。
Core 2 DuoのPCでは普通に動くのでCPUパワーの問題かなと思ったのですが・・・。
Serialportクラスを3つ並べてそれぞれをDataReceivedイベントで監視するという
安直な考えで組んだプログラムですのでプログラムにも問題があるのでしょうが
純粋にCPU負荷がかかる処理であることが原因なのでしょうか?
0115デフォルトの名無しさん2007/11/23(金) 23:42:36
>>110
ふいたw
0116デフォルトの名無しさん2007/11/23(金) 23:46:28
>>114

同期、非同期から勉強することをお勧めする。
0117デフォルトの名無しさん2007/11/24(土) 00:16:22
>>114
イベント内でファイル開いたりしてないよね?
0118デフォルトの名無しさん2007/11/24(土) 00:28:45
>>114
>DataReceivedイベントで監視する
通信のプロトコルが分からないので断定はできないが、
たぶん設計としてここがまずいと思う。

必ずしもフリースレッドでやる必要はないんだけど、定期的にバッファをポーリングする
やり方の方がほとんどの場合適合的じゃないのかな。
0119デフォルトの名無しさん2007/11/24(土) 14:14:11
C#のWindowsアプリから、Excelで申請書を出力するアプリを作ろうとしています。
VS2005で、VSTOは持っていません。Excelは2003です。

あらかじめ、申請書のフォーマットのxlsファイルを用意し、そこに作成するWindowsアプリで
COMでExcelを操作して申請者の氏名などの情報を書き込んで、xlsを別名で保存するつもりです。

困っているのが、申請書に、Excelのフォームコントロール(チェックボックス、コンボボックス、
ラジオボックス)があり、これらをC#から操作(選択)する方法がわからないことです。

現在、VS上でどのオブジェクトを操作したらいいのかもわからない状態です。
ご存じの方がいらっしゃったら、お教えいただけないでしょうか。
0120デフォルトの名無しさん2007/11/24(土) 16:55:30
マクロにデータ与えて操作
0121デフォルトの名無しさん2007/11/24(土) 17:39:56
>>119
たぶん正攻法じゃないとは思うけど、
VBA側の処理で特定のセルの値とコントロールの状態をリンクするコードを書いておけば、
C#のコードからはその特定のセルの値を操作すれば間接的にコントロールを操作できるんじゃないの?
01221192007/11/24(土) 18:30:01
>>120,121

ありがとうございます。

マクロを組み合わせる方法がよさそうですね。
申請書の変更にも対応しやすそうですし。
0123デフォルトの名無しさん2007/11/24(土) 19:11:25
URLからそのページのTITLEを取得する方法
あれば教えていただけないでしょうか?

フレームワーク2.0です。
0124デフォルトの名無しさん2007/11/24(土) 19:22:18
手っ取り早くサイトのページダウンロードして正規表現か何かでtitle抜き出せば?
0125デフォルトの名無しさん2007/11/24(土) 19:34:19
>>122
VBAより、用意したWSHのスクリプトを呼び出す方がかっこよくね?
01261232007/11/24(土) 19:37:55
>>124
ありがとうございます。

うまいことクラスが用意されてる感じではなさそうってことですね。

最終的に方法が見つからなければその方法でいきたいと思います。

0127デフォルトの名無しさん2007/11/24(土) 19:43:11
どんなけ人頼みなんだよw
0128デフォルトの名無しさん2007/11/24(土) 22:37:31
内の会社はリフレクションでExcelのCOMを操作するライブラリ作ってやってる。最低限の機能しかないけど、Excelのバージョンに関わらず動くから便利。
ただ大量に出力する時はCOM経由は遅いのがネックだね
0129デフォルトの名無しさん2007/11/24(土) 23:50:50
それください
0130デフォルトの名無しさん2007/11/25(日) 00:14:15
ネット上にファイルが存在するかどうかを調べる為には
System.Net.WebClientクラスのDownloadFileメソッド等で
例外処理をする以外の方法はありませんか?
0131デフォルトの名無しさん2007/11/25(日) 00:15:03
リストビューの詳細表示でアイコン表示しないときでも、1行当たりの高さを広げて
間隔よく表示したいのですけれども、方法ありますか?
■ このスレッドは過去ログ倉庫に格納されています