C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

全過去ログを検索

<< 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 >>
■2397  Re[5]: DEVMODEの値を変更したい
□投稿者/ あや -(2006/01/26(Thu) 11:50:58)

    分類:[C#] 

    肝心なところを見逃してしまい大変申し訳ありませんでした m(__)m
    (決して意図的ではありませんのでご勘弁を・・・)

    再度内容を確認し、以下のようにすることで読み書きができました。
    勉強不足のためまだ不安なところがありますが、ひとまず動くようになりましたのでホッとしています。

    以下、現在のソースと不安なところです。

      # APIの宣言と、ロックを解放〜に自信がありません。
      # GlobalUnlock()、SetHdevmode()、GlobalFree()の引数はhMemでいいのでしょうか?
      # 私が試した限りでは、devmodePtrでも正しく動作しています。

      [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]
      public struct DEVMODE {
          ・・・
      };

      [DllImport("kernel32.dll")]
      private static extern IntPtr GlobalLock(IntPtr hMem);
      [DllImport("kernel32.dll")]
      private static extern bool GlobalUnlock(IntPtr hMem);
      [DllImport("kernel32.dll")]
      private static extern IntPtr GlobalFree(IntPtr hMem);

      private void btnTest_Click(object sender, System.EventArgs e) {
       IntPtr hMem = this.printDocument.PrinterSettings.GetHdevmode(); // ハンドル取得
       IntPtr devmodePtr = GlobalLock(hMem); // ロック・ハンドルからポインタを取得
       DEVMODE dm =
           (DEVMODE)Marshal.PtrToStructure(devmodePtr, typeof(DEVMODE)); // ポインタから構造体にコピー

       dm.dmCopies = 10; // 印刷部数を10部に設定
       dm.dmCollate = 1; // 部単位で印刷
       Marshal.WriteByte(devmodePtr, dm.dmSize+720, 0); // ドライバ固定の720Byte目を0
       Marshal.StructureToPtr(dm, devmodePtr, true); // 構造体からポインタにコピー

       GlobalUnlock(hMem); // ロックを解放
       this.printDocument.PrinterSettings.SetHdevmode(hMem); // PriterSetteingsにコピー
       GlobalFree(hMem); // ハンドルを解放
      }

    よろしくお願いします。

記事No.2377 のレス /0過去ログ2より / 関連記事表示
削除チェック/

■2392  Re[4]: DEVMODEの値を変更したい
□投稿者/ あや -(2006/01/25(Wed) 17:45:20)

    分類:[C#] 

    Hongliangさんのアドバイスを元にとりあえずDEVMODEを取得するところからチャレンジしてみたのですが、取得するたびにDEVMODEの内容が少しずつ違うのですが・・・
    以下ソースと結果ですが、何か間違っているところはあるでしょうか?(DEVMODEの定義はPINVOKE.NETを参考にさせていただきました)

      [StructLayout(LayoutKind.Sequential)]
      public struct DEVMODE {
       [MarshalAs(UnmanagedType.ByValTStr,SizeConst=32)]
       public string dmDeviceName;
       public short dmSpecVersion;
       public short dmDriverVersion;
       public short dmSize;
       public short dmDriverExtra;
       public int dmFields;
       public short dmOrientation;
       public short dmPaperSize;
       public short dmPaperLength;
       public short dmPaperWidth;
       public short dmScale;
       public short dmCopies;
       public short dmDefaultSource;
       public short dmPrintQuality;
       public short dmColor;
       public short dmDuplex;
       public short dmYResolution;
       public short dmTTOption;
       public short dmCollate;
       [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
       public string dmFormName;
       public short dmLogPixels;
       public short dmBitsPerPel;
       public int dmPelsWidth;
       public int dmPelsHeight;
       public int dmDisplayFlags;
       public int dmDisplayFrequency;
       public int dmICMMethod;
       public int dmICMIntent;
       public int dmMediaType;
       public int dmDitherType;
       public int dmReserved1;
       public int dmReserved2;
       public int dmPanningWidth;
       public int dmPanningHeight;
      };

      [DllImport("kernel32.dll")]
      private static extern IntPtr GlobalFree(IntPtr hMem);

      private void btnTest_Click(object sender, System.EventArgs e) {
       IntPtr devmodePtr = this.printDocument.PrinterSettings.GetHdevmode();
       DEVMODE dm = (DEVMODE)Marshal.PtrToStructure(devmodePtr, typeof(DEVMODE));
       GlobalFree(devmodePtr);

       Debug.WriteLine("dm.dmDeviceName[" + dm.dmDeviceName + "]");
       Debug.WriteLine("dm.dmSpecVersion[" + dm.dmSpecVersion + "]");
       Debug.WriteLine("dm.dmDriverVersion[" + dm.dmDriverVersion + "]");
       Debug.WriteLine("dm.dmSize[" + dm.dmSize + "]");
       Debug.WriteLine("dm.dmDriverExtra[" + dm.dmDriverExtra + "]");
    }

    結果1回目
     dm.dmDeviceName[ !]
     dm.dmSpecVersion[0]
     dm.dmDriverVersion[0]
     dm.dmSize[144]
     dm.dmDriverExtra[981]

    結果2回目
     dm.dmDeviceName[ p・p]
     dm.dmSpecVersion[0]
     dm.dmDriverVersion[0]
     dm.dmSize[136]
     dm.dmDriverExtra[981]

    長くなってしまいましたが、よろしくお願いします。
記事No.2377 のレス /0過去ログ2より / 関連記事表示
削除チェック/

■2359  Re[4]: C#でバイト単位に取り出すについて
□投稿者/ 魔界の仮面弁士 -(2006/01/24(Tue) 13:15:51)

    分類:[C#] 

    > ⇒上位バイト: 0x81〜0x9F, 0xE0〜0xFCのこれを判定(IF文)すれば
    >  いいのですよね?
    そう単純な話でも無いでしょう。

    たとえば、「=≠ab」の 4 文字 8 バイトの Shift_JIS データを
    切り出す事を考えてみてください。このバイナリは、
     0x8181:=
     0x8182:≠
     0x8281:a
     0x8282:b
    のような値になっているわけです。

    という事は、どこで切り出しても、最後のバイナリは 0x81 または 0x82 に
    なるわけですが、それが「全角文字の 1 バイト目か 2 バイト目か」は、
    文字列の途中からでは判断できないので、0x20 に置き換えようが無いでしょう。


    ですから結局、文字列の先頭から数えていく必要があると思います。
記事No.2349 のレス /0過去ログ2より / 関連記事表示
削除チェック/

■2355  Re[3]: C#でバイト単位に取り出すについて
□投稿者/ ゾロ -(2006/01/24(Tue) 11:04:27)

    分類:[C#] 

    中博俊さん、魔界の仮面弁士さん、回答ありがとうございます。

    中博俊さん
    ⇒そうです最後の1バイトが上位バイトならスペースに置き換えると
     言うことです。(例題の件は、参考になりました。)

    魔界の仮面弁士さん
    ⇒上位バイト: 0x81〜0x9F, 0xE0〜0xFCのこれを判定(IF文)すれば
     いいのですよね?
記事No.2349 のレス /0過去ログ2より / 関連記事表示
削除チェック/

■2352  Re[2]: C#でバイト単位に取り出すについて
□投稿者/ 魔界の仮面弁士 -(2006/01/24(Tue) 09:37:23)

    分類:[C#] 

    少し補足。

    > ShiftJISな世界のことを言っていて、最後のスペースを0x20とするということであれば、最後のバイトがShift-JISの日本語の範囲の下位バイトでなく、上位バイトであればスペースに置き換えるということでしょうか。

    Shift_JIS に関しては、
     制御コード:
      0x00〜0x1F, 0x7F
     ASCII文字:
      0x20〜0x7E
     半角カタカナ:
      0xA1〜0xDF
     漢字:
      上位バイト: 0x81〜0x9F, 0xE0〜0xFC
      下位バイト: 0x40〜0x7E, 0x80〜0xFC
    のようになっています。
記事No.2349 のレス /0過去ログ2より / 関連記事表示
削除チェック/

■2349  C#でバイト単位に取り出すについて
□投稿者/ ゾロ -(2006/01/23(Mon) 18:48:02)

    分類:[C#] 


    分類:[C#] 

    「文字列の一部をバイト単位で取り出す (LeftB, MidB, RightB)」を
    参考にさせていただきました。
    これをさらに教えて欲しいのですが、

    文字列が"ABCDEF"として、左端から7バイトの文字列を取得する場合に
    "ABCD_"(_はスペースです)とリターンするには、どうすればいいでしょうか?

    なにぶん、初心者の為によろしくお願いします。
親記事 /0過去ログ2より / 関連記事表示
削除チェック/

■2354  Re[8]: ListView
□投稿者/ YM -(2006/01/24(Tue) 09:56:15)

    分類:[VB.NET] 

    コードも載せておきます。

    Dim cPoint As Point = ListView1.PointToClient(Cursor.Position)
    Dim lv As ListViewItem = ListView1.GetItemAt(cPoint.X, cPoint.Y)
    Dim txt as String = lv.Text
記事No.2341 のレス / END /過去ログ2より / 関連記事表示
削除チェック/

■2347  Re[5]: ListView
□投稿者/ まどか -(2006/01/23(Mon) 18:06:29)

    分類:[VB.NET] 

    座標にはスクリーン座標とクライアント座標があります。
    画面(ディスプレイ)上の座標とコントロール内部での座標です。
    クライアント座標はそのコントロールの左上が(0,0)になります。

    > With ListView1
    > Dim lv As ListViewItem = .GetItemAt(.Cursor.Position.X,.Cursor.Position.Y)
    > End With

    GetItemAtメソッドとPositionプロパティのそれぞれがどの座標を指定するのかを調べてみましょう。

    たぶん一般的には、ダブルクリックの開始アクション、つまりMouseDownで座標を保存して
    DoubleClickでその座標を使用します。
記事No.2341 のレス /0過去ログ2より / 関連記事表示
削除チェック/

■2346  Re[4]: ListView
□投稿者/ YM -(2006/01/23(Mon) 17:45:40)

    分類:[VB.NET] 

    解決できそうだと思ったのですが、また詰まってしまいました。

    With ListView1
    Dim lv As ListViewItem = .GetItemAt(.Cursor.Position.X,.Cursor.Position.Y)
    End With

    というとこまでは考えました。
    デバッグで確認したところ、座標は正しく取得できてるようです。
    しかし、ここからテキストを取得できません。

    Dim txt as String = lv.text としたのですが、
    エラーで弾かれました。
記事No.2341 のレス /0過去ログ2より / 関連記事表示
削除チェック/

■2344  Re[2]: データベースに反映する方法
□投稿者/ 津田子 -(2006/01/23(Mon) 17:30:11)

    分類:[C#] 

    2006/01/23(Mon) 17:46:32 編集(投稿者)

    中さん、早速のお返事ありがとうございます。

    "カラムマッピング(初めて知った言葉です)"を自分なりに調べてプログラムをいじりました。

    データセットにデータベースの内容を吸いこむ前に以下のコードを追記し、
    /*************以下コード*****************/
    //データマッピング...のつもりです
    DataTable dataTable = new DataTable();
    dataTable.TableName = "tableName";
    DataColumn col;
    col = dataTable.Columns.Add("CustId", typeof(int));
    col.AllowDBNull = false;
    col = dataTable.Columns.Add("CustName",typeof(string));
    col.AllowDBNull = false;
    dataSet.Tables.Add(dataTable);

    //データベース→データセット
    //(ここは追記ではなく編集でした)
    SqlDataAdapter dataAdapter = new SqlDataAdapter(sqlStr, connStr);
    dataAdapter.Fill(dataTable);
    ShowDataSet(dataSet);

    /*************以上コード*****************/

    さらにINSERTのSQL文について、テーブル名をソースデータのテーブル名に変更したら解決しました。
    中さん、本当にありがとうございました。
記事No.2339 のレス / END /過去ログ2より / 関連記事表示
削除チェック/

■2339  データベースに反映する方法
□投稿者/ 津田子 -(2006/01/23(Mon) 12:04:33)

    分類:[C#] 


    分類:[C#] 

    いつもお世話になっております。
    ADO.NETのInsertCommandについて質問させてください。
    DataSetに追加した行をCommandBuilderを使わずにデータベースに反映させたいのですが、うまくいきません。

    /*************以下コード*******************/

    public static void Main()
    {
    string connStr = "Server = (local); Trusted_Connection = yes; database=KADAIDB";
    string sqlStr = "SELECT * FROM CustTest";
    SqlConnection conn = new SqlConnection(connStr);
    DataSet dataSet = new DataSet();

    //データベース→データセット
    SqlDataAdapter dataAdapter = new SqlDataAdapter(sqlStr, connStr);
    dataAdapter.Fill(dataSet);
    dataSet.Tables.Add("tableName");

    //新しい行をデータセットに挿入
    DataRow newRow = dataSet.Tables[0].NewRow();
    newRow["CustId"] = 123;
    newRow["CustName"] = "Betty";
    dataSet.Tables[0].Rows.Add(newRow);

    //InsertCommandを作成
    SqlCommand insertCommand =new SqlCommand
    ("INSERT INTO tableName(CustId,CustName) VALUES (@pCustID, @pCustName)",conn);
    SqlParameter p1 = new SqlParameter();
    p1.ParameterName = "@pCustId";
    p1.SourceColumn = "CustId";
    insertCommand.Parameters.Add(p1);
    SqlParameter p2 = new SqlParameter();
    p2.ParameterName = "@pCustName";
    p2.SourceColumn = "CustName";
    insertCommand.Parameters.Add(p2);

    dataAdapter.InsertCommand = insertCommand;

    //追加した行をデータベースに反映させているつもりなのですが...
    dataAdapter.Update(dataSet, "tableName");
    }

    /************以上コード******************************/
    開発環境はVisual Studio .NET 2003, データベースはSQLServer2000です。
    ご教示お願いします。
親記事 /0過去ログ2より / 関連記事表示
削除チェック/

■2350  Re[5]: C# 固定長 Randomアクセスについて
□投稿者/ 吉原 英治 -(2006/01/23(Mon) 22:13:53)

    分類:[C#] 

    皆様、有難うございます。


    FileSystem.FileGet(fixFileNo, ref at, position) ;
    上記コードを、以下のようにして、うまくいきました。

    ValueType at2 = at;
    FileSystem.FileGet(fixFileNo , ref at2, position);
    at=(Kouzoutai)at2;

    "緑のバイク"氏より指導頂きました。
記事No.2326 のレス / END /過去ログ2より / 関連記事表示
削除チェック/

■2337  Re[4]: C# 固定長 Randomアクセスについて
□投稿者/ おおた -(2006/01/23(Mon) 08:28:26)

    分類:[C#] 

    No2329に返信(吉原 英治さんの記事)
    > 具体的にどのように直せばよろしいでしょうか。

    FileGet メソッドのリファレンスを見るかぎりは、二番目の仮引数 Value は
    OutAttribute 属性の指定がない参照パラメータとして宣言されていますから、
    C# からも参照パラメータとして見えると思いますよ。

    FileSystem.FileGet(fixFileNo, ref at, position) ;

    メソッドの仕様から考えると、もしかすると出力パラメータとして見えるかも
    しれません。

    FileSystem.FileGet(fixFileNo, out at, position) ;

記事No.2326 のレス /0過去ログ2より / 関連記事表示
削除チェック/

■2328  Re[2]: C# 固定長 Randomアクセスについて
□投稿者/ 吉原 英治 -(2006/01/22(Sun) 13:28:38)

    分類:[C#] 

    有難うございます。

    以下のようにということではないですよね。

    FileSystem.FileGet(fixFileNo , at , position);

    まだ初心に近いもので、、。
    ヒントを頂いても、それをこちらが理解できるレベルに無いようです。

記事No.2326 のレス /0過去ログ2より / 関連記事表示
削除チェック/

■2327  Re[1]: C# 固定長 Randomアクセスについて
□投稿者/ 名無しぃシャープ -(2006/01/22(Sun) 13:04:01)

    分類:[C#] 

    No2326に返信(吉原 英治さんの記事)
    > 'Kouzoutaiはクラスを意味しますが、変数でなければなりません'とのこと。

    そのまんまだと思いますです。

    > struct Kouzoutai

    > Kouzoutai at = new Kouzoutai();

    > FileSystem.FileGet(fixFileNo , Kouzoutai , position); // ビルドエラー

    使うのは「at」じゃないんですか?
    Kouzoutaiは型で宣言してて実体じゃないですから。

記事No.2326 のレス /0過去ログ2より / 関連記事表示
削除チェック/

■2326  C# 固定長 Randomアクセスについて
□投稿者/ 吉原 英治 -(2006/01/22(Sun) 12:07:23)

    分類:[C#] 


    分類:[C#] 

    はじめまして、いつも便利に活用させて頂いてます。
    C#2002でランダムアクセス(固定長)を読み込みをしたいのですが、
    ビルドエラーで困っています。ご助言お願いします。
    'kouzoutaiはクラスを意味しますが、変数でなければなりません'とのこと。
    MSDNサイトにも詳しく出ていない?ので、、。

    コードは以下のようです。

    using Microsoft.VisualBasic;

    struct Kouzoutai
    {
    [VBFixedString(20)] public string Title;
    [VBFixedString(20)] public string ISBN;
    [VBFixedString(20)] public string Author;
    [VBFixedString(20)] public string Year;
    [VBFixedString(20)] public string Company;
    }

    int position;
    int fixFileNo;
    Kouzoutai at = new Kouzoutai();

    private void button1_Click(object sender, System.EventArgs e)
    {
    position = 1;
     fixFileNo =1;
    FileSystem.FileOpen(fixFileNo,@"d:\FlieAcess\123456.txt",OpenMode.Random,OpenAccess.Default,
    OpenShare.Default,Strings.Len(at));

    FileSystem.FileGet(fixFileNo , Kouzoutai , position); // ビルドエラー

    textBox1.Text = at.Title;
    textBox2.Text = at.ISBN;
    textBox3.Text = at.Author;
    textBox4.Text = at.Year;
    textBox5.Text = at.Company;

    // ファイルを閉じる
    FileSystem.FileClose(fixFileNo);
    }
親記事 /0過去ログ2より / 関連記事表示
削除チェック/

■2297  Re[1]: System.Drawing.ImageをXMLに出力
□投稿者/ 魔界の仮面弁士 -(2006/01/19(Thu) 14:58:50)

    分類:[C#] 

    > が可能ですが、肝心の画像をバイト配列に落とす方法がわかりません。

    MemoryStream などを経由させてみては如何でしょう。

    Image.Save(ファイル名) のかわりに、Image.Save(ストリーム, 形式) で
    保存するようにして、そこからバイト配列を取り出す……と。

    > また、復元時もバイト配列に得たデータをImageに戻す方法も同様に
    > わかりません。
    Image.FromStream(ストリーム) で。
記事No.2286 のレス /0過去ログ2より / 関連記事表示
削除チェック/

■2206  Re[1]: DataGridのセルについて
□投稿者/ trapemiya -(2005/12/29(Thu) 09:53:17)
>

    分類:[ASP.NET] 

    ASP, ASP.NET共に、最終的にはブラウザで表示されるTABLEタグにDataGridは変換されます。考え方として、<TD>タグの中で、HTMLで表現できることであれば何とかなるとは思いますが、そうでなければ難しいと思います。<TD>タグを斜線で区切るような記述はHTMLにはたぶん無いと思いますので、今回の件は難しいんじゃないでしょうか。
記事No.2203 のレス /0過去ログ2より / 関連記事表示
削除チェック/

■2205  Re[1]: (C#.NET)エスケープシーケンスについて
□投稿者/ bell -(2005/12/28(Wed) 11:50:04)

    分類:[C#] 

    エスケープシークエンスの考え方が間違っています。

    No2201に返信(とおりすがりさんの記事)
    >  [string abc = "C:\Program Files";]のように記述すると
    >  構文エラーが発生するため、
    >  [string abc = @"C:\ProgramFiles";]のように
    >  エスケープシーケンス文字として読ませるよう記述すると思います。

    逆です。文字列に"\"があった場合、
    その直後の1文字とあわせて"エスケープシークエンス1文字"として解釈します。
    (\n、\t、etc...)
    文字列内で単純に文字"\"を使いたい場合、"\\"と記述する必要があります。
    つまり
    "C:\Program Files"という文字列は
    "C:"という文字列、
    "\P"というエスケープシークエンス、
    "rogram Files"という文字列、
    この3つでできていることになります。
    \Pというエスケープシクエンスは存在していないため、
    構文エラーが発生してしまいます。
    ("\r"も"\n"も両方ともエスケープシークエンスのため構文エラーにはなりません)

    @を文字列の前につけた場合には、
    直後の文字列内の"\"を自動的に"\\"として扱うため、
    @"C:\Program Files"という文字列は"C:\\Program Files"と等価になるわけです。

    @"\"から"\"への変換処理ですが、
    エスケープシークエンスは"\"+後ろの1文字という形をとるため、
    "\\"の後ろの1文字を参照して対応したエスケープシークエンスに置き換える、
    という動きになると思うので一筋縄ではいかないと思います。

    単純に@"\〜"を"\〜"にReplaceメソッドにて置き換えてしまうのはどうでしょうか?
    お困りの件は
    @"\r"("\\r")を\r",@"\n"("\\n")を"\n"にReplaceしてあげれば実現できると思います。

記事No.2201 のレス /0過去ログ2より / 関連記事表示
削除チェック/

■2180  外部アプリケーション起動時について
□投稿者/ pp -(2005/12/21(Wed) 10:28:02)

    分類:[VB.NET] 


    分類:[VB.NET] 

    現在以下のようにして外部アプリケーションを起動しているのですが、起動して終了した後もとのファームがWord等を開いていたりすると後ろに隠れてしまいます。また、強制的に最前面にしようとタスクバーが点滅してしまいます。起動した外部アプリケーションを終了した時に元のフォームを最前面に表示し、タスクバーの点滅がないようにしようとするにはどうしたらよいのでしょうか?

    OS:WinXP VB.NET2003 Framework1.1
    ------------------------------------------------------------------------
    Private m_frm As Form
    Private proc As Process


    Public Sub StartAppWait(ByVal parentForm As Form, ByVal strPath As String)

    proc = New Process
    m_frm = parentForm

    Try
    m_frm.Refresh()
    m_frm.Enabled = False

    '// ▼アプリケーションを起動▼ //
    With proc.StartInfo
    .FileName = PathCombine(g_strAppPath, strPath)
    .WindowStyle = ProcessWindowStyle.Normal
    End With
    proc.Start()

    '// プロセスが終了した時にExitedイベントを発生 //
    proc.EnableRaisingEvents = True
    '// イベントハンドラの追加 //
    AddHandler proc.Exited, AddressOf proc_Exited
    Catch ex As Exception
    Call ShowErrorMessage(ex, "アプリケーション起動エラー")
    m_frm.Enabled = True
    Finally
    End Try
    End Sub

    Private Sub proc_Exited(ByVal sender As Object, ByVal e As EventArgs)

    Try
    '// プロセスが終了した時に実効される //
    m_frm.Enabled = True
    m_frm.Activate()
    m_frm.Refresh()
    Catch ex As Exception
    Call ShowErrorMessage(ex, "外部アプリケーション終了エラー")
    Finally
    '// イベントハンドラの開放 //
    RemoveHandler proc.Exited, AddressOf proc_Exited

    proc.Close()
    proc.Dispose()

    m_frm.TopMost = True
    m_frm.TopMost = False
    End Try

    End Sub

親記事 /0過去ログ2より / 関連記事表示
削除チェック/

<前の20件 | 次の20件>

<< 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 >>

ヒット件数が多いので過去ログ1〜3 までの検索結果 / 過去ログ4からさらに検索→

パスワード/

- Child Tree -