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

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

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

全過去ログを検索

<< 0 >>
■65033  Re[28]: 【VB2005、VB.NET】構造体のコピーについて
□投稿者/ コンバート後に悩む人 -(2013/01/30(Wed) 11:57:26)
    2013/01/30(Wed) 11:57:58 編集(投稿者)

    開始位置のパラメータを追加した別建てのメソッドを作成しました。
    以下のような感じでしょうか。

    #前述の話題ですが、Midだから+1ですよね。substringでしたら0スタートなので+1の心配はしなくてよいということをすっかり失念してました。


    Dim a5 As AAA = StructureFromText(Of AAA)(strW)
    Dim b5 As BBB = StructureFromText(Of BBB)(strW, Len(a5))


    '指定された文字列を、VBFixedString 属性の付いたフィールドに順次格納した値を返します。
    Public Function StructureFromText(Of T As Structure)(ByVal str As String, ByVal intStart As Integer) As T
    'RuntimeHelpers.GetObjectValue 対策の為、ValueType で受ける
    Dim newValue As ValueType = StructureFromText
    Dim pos As Integer = 1
    For Each f As FieldInfo In newValue.GetType().GetFields()
    Dim attributes() As Object = f.GetCustomAttributes(GetType(VBFixedStringAttribute), False)
    If attributes.Length <> 0 Then
    Dim attr As VBFixedStringAttribute = DirectCast(attributes(0), VBFixedStringAttribute)
    Dim value As String = Strings.Mid(str & StrDup(attr.Length, " "c), intStart + pos, attr.Length)
    f.SetValue(newValue, value)
    pos += attr.Length
    End If
    Next
    Return DirectCast(newValue, T)
    End Function
記事No.64946 のレス /過去ログ109より / 関連記事表示
削除チェック/

■66485  C#カードゲーム作成中 助けて〜TT
□投稿者/ Cubers -(2013/04/29(Mon) 09:25:46)

    分類:[C#] 

    学校のクラブでカードゲームを作っているのですがなぜか配列の順番にカードが表示されません、どなたか助けてください・・・・
    ちなみにゲームは次のカードが今のカードより低いか高いかを当てるやつです。

    開発環境はC#Express
    使用言語はC#です。


    コードは以下

    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.IO;
    using System.Runtime.InteropServices;

    namespace TestCards
    {
    public partial class Form1 : Form
    {
    Cards myCards = new Cards();
    Boolean myDraw = true;
    //Int32 cardCount = 0;

    public Form1()
    {
    InitializeComponent();
    }

    private void Form1_Paint(object sender, PaintEventArgs e)
    {
    if (myDraw)
    {
    Point myPoint = new Point(75, 50);
    //if (cardCount >= 0)
    //{
    myCards.DrawCard(e, myCards.GetNewCard(), myPoint);
    //myPoint.X += 105;
    //}
    }
    }

    private void Form1_Load(object sender, EventArgs e)
    {

    }

    private void hButton_Click(object sender, EventArgs e)
    {
    myDraw = true;
    this.Refresh();
    int prevNum = myCards.previousNum();
    int newNum = myCards.GetNewCard();

    if (newNum > prevNum)
    {
    MessageBox.Show(this, "You Win!!");
    }
    else
    {
    MessageBox.Show(this,"You Lose!!");
    }
    }

    private void lButton_Click(object sender, EventArgs e)
    {
    this.Refresh();
    int prevNum = myCards.previousNum() % 12;
    int newNum = myCards.GetNewCard() % 12;
    //int v = x % 12;
    //int z = y % 12;
    if (newNum < prevNum)
    {
    MessageBox.Show(this, "You Win!!");
    }
    else
    {
    MessageBox.Show(this,"You Lose!!");
    }
    }

    public class Cards
    {
    const int width = 79;
    const int height = 123;
    static Random _random = new Random();
    int[] cardArray = new int [52];
    int deckCardNumber;
    int previousCardNumber;

    public Cards()
    {
    deckCardNumber = 0;
    for (int i = 0; i < 52; i++)
    cardArray[i] = i;
    Shuffle(cardArray);
    }

    public int GetNewCard()
    {
    deckCardNumber++;
    deckCardNumber %= 52;
    return cardArray.ElementAt(deckCardNumber);
    }
    public int previousNum()
    {
    deckCardNumber++;
    deckCardNumber %= 52;
    return cardArray.ElementAt(deckCardNumber-1);
    }



    //public int nextNum()
    //{
    // object n = cardArray[1];
    // return cardArray[1];
    //}

    public void DrawCard(PaintEventArgs e, int cardNumber, Point p)
    {
    // Create a Bitmap object from a file.
    Bitmap myBitmap = new Bitmap("..//..//cards.png");
    int xOffset = 0; // TBD - Need to handle all cards
    int yOffset = 0; // TBD - Need to handle all cards

    if ((cardNumber <= 12) && (cardNumber >= 0))
    {
    xOffset = +cardNumber * width; // TBD - Need to handle all cards
    }
    else if ((cardNumber <= 25) && (cardNumber >= 13))
    {
    xOffset = +(cardNumber - 13) * width;
    yOffset = +123;
    }
    else if ((cardNumber <= 38) && (cardNumber >= 26))
    {
    xOffset = +(cardNumber - 26) * width;
    yOffset = +246;
    }
    else if ((cardNumber <= 51) && (cardNumber >= 39))
    {
    xOffset = +(cardNumber - 39) * width;
    yOffset = +369;
    }
    else if ((cardNumber <= 53) && (cardNumber >= 52))
    {
    xOffset = +(cardNumber - 52) * width;
    yOffset = +492;
    }
    else if (cardNumber >= 54)
    {
    xOffset = +158;
    yOffset = +492;
    }







    // Clone a portion of the Bitmap object.
    Rectangle cloneRect = new Rectangle(xOffset, yOffset, width, height);
    System.Drawing.Imaging.PixelFormat format = myBitmap.PixelFormat;
    Bitmap cloneBitmap = myBitmap.Clone(cloneRect, format);

    // Draw the cloned portion of the Bitmap object.
    e.Graphics.DrawImage(cloneBitmap, p);
    }

    public static void Shuffle<j>(j[]array)
    {
    var random = _random;

    for (int i = array.Length; i > 1; i--)
    {
    // Pick random element to swap.
    int k = random.Next(i);
    // 0 <= j <= i-1
    // Swap.
    j tmp = array[k];
    array[k] = array[i - 1];
    array[i - 1] = tmp;
    }
    }
    }
    }
    }
親記事 /過去ログ112より / 関連記事表示
削除チェック/

■88011  C#でのwaveファイルの波形表示
□投稿者/ akaveco -(2018/07/30(Mon) 05:12:26)

    分類:[C#] 

    私は、現在Visual Studioを用いて音声ファイルの波形表示をしようと試みています。使用言語はC#です。
    そこでネットで調べて出てきたのが
    http://tomosoft.jp/design/?p=8985
    https://tomosoft.jp/design/?p=9023
    のようなもので、このサイトでの方法はうまくいったのですが、対応しているのが8ビット、16ビットのモノラルとステレオのWaveファイルのみになっています。
    24ビットや32ビットに対応するにはどのようにすればいいのでしょうか?

    また、この方法以外でもっと効率のいい、waveファイルだけでなく、mp3やaiffなど、音声ファイル全般に対応できるような方法はないのでしょうか?

    回答よろしくお願いいたします。
親記事 /過去ログ151より / 関連記事表示
削除チェック/

■93726  Re[3]: numericupdown1~10のValueを、取得する
□投稿者/ tsukasa -(2020/01/20(Mon) 19:04:06)
    No93725 (774RR さん) に返信
    >>自前の配列を用意した方が楽かもしれませんね。
    > オイラもこれに1票。
    >
    > しょせん GUI イベントハンドラなのでここで1クロックを争う必要はまったくないんだけど
    > 動的に GUI 部品を名前から探すのは遅いと思うっす。
    >
    > ところでオイラにはいまだにこの質問が
    > - numericUpDown0 から numericUpDown9 の10個なのか
    > - numericUpDown0 から numericUpDown10 の11個なのか
    > - それ以外なのか
    > 微妙に不明っす。まあいいけど。

    ありがとうございます。上記コードで解決しました。
記事No.93717 のレス / END /過去ログ162より / 関連記事表示
削除チェック/

■95146  Re[1]: DataGridViewの選択状態を保持したい
□投稿者/ kiku -(2020/06/25(Thu) 12:35:43)
    No95145 (かつお節味噌汁 さん) に返信
    > 選択が解除されない方法として、Bの処理前に選択行を保存しておき、
    > Bが実行された後に、復元するという処理にしたいのですが
    > 継承?(オーバーライド)というものをよくわかっておらず
    > どのように処理をかけばよろしいのでしょうか。

    アプリから任意の行を選択することができます。
    下記が参考になると思います。
    https://dobon.net/vb/dotnet/datagridview/selectedcells.html
記事No.95145 のレス /過去ログ165より / 関連記事表示
削除チェック/

■95156  Re[2]: DataGridViewの選択状態を保持したい
□投稿者/ かつお節味噌汁 -(2020/06/25(Thu) 22:50:40)
    No95146 (kiku さん) に返信
    > ■No95145 (かつお節味噌汁 さん) に返信
    >>選択が解除されない方法として、Bの処理前に選択行を保存しておき、
    >>Bが実行された後に、復元するという処理にしたいのですが
    >>継承?(オーバーライド)というものをよくわかっておらず
    >>どのように処理をかけばよろしいのでしょうか。
    >
    > アプリから任意の行を選択することができます。
    > 下記が参考になると思います。
    > https://dobon.net/vb/dotnet/datagridview/selectedcells.html

    申し訳ございません。
    参考サイトを元に書いてみたのですが、どうも
    理解が及ばず選択状態を維持することがかないません。
    よろしければ他の参考サイトや、アドバイスを頂けると幸いです。
記事No.95145 のレス /過去ログ165より / 関連記事表示
削除チェック/

■95159  Re[3]: DataGridViewの選択状態を保持したい
□投稿者/ 大谷刑部 -(2020/06/26(Fri) 10:51:08)
    No95156 (かつお節味噌汁 さん) に返信
    > ■No95146 (kiku さん) に返信
    >>■No95145 (かつお節味噌汁 さん) に返信
    > >>選択が解除されない方法として、Bの処理前に選択行を保存しておき、
    > >>Bが実行された後に、復元するという処理にしたいのですが
    > >>継承?(オーバーライド)というものをよくわかっておらず
    > >>どのように処理をかけばよろしいのでしょうか。
    >>
    >>アプリから任意の行を選択することができます。
    >>下記が参考になると思います。
    >>https://dobon.net/vb/dotnet/datagridview/selectedcells.html
    >
    > 申し訳ございません。
    > 参考サイトを元に書いてみたのですが、どうも
    > 理解が及ばず選択状態を維持することがかないません。

    どのイベントで処理を記載してますか?
    行選択状態からなら、グリッドのプロパティーがデフォルトの設定なら、グリッド以外にフォーカスが移っても選択は維持され、
    なさりたいことはできると思います。
    解除の方も上記サイトに説明が載っているので必要な情報はそろってるはずです。
    どうダメなのか具体的に書かないと答えようがないと思いますが。
    それに、回答者に対して、失礼な言いぐさですよ。



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

■95162  Re[3]: DataGridViewの選択状態を保持したい
□投稿者/ kiku -(2020/06/26(Fri) 12:36:53)
    No95156 (かつお節味噌汁 さん) に返信
    > ■No95146 (kiku さん) に返信
    >>■No95145 (かつお節味噌汁 さん) に返信
    > 申し訳ございません。
    > 参考サイトを元に書いてみたのですが、どうも
    > 理解が及ばず選択状態を維持することがかないません。
    > よろしければ他の参考サイトや、アドバイスを頂けると幸いです。
    
    簡単なサンプルを作ってみました。
    ボタンを押下すると、2行目が選択されます。
    
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
    
                // カラム数を指定
                dataGridView1.ColumnCount = 4;
    
                // カラム名を指定
                dataGridView1.Columns[0].HeaderText = "教科";
                dataGridView1.Columns[1].HeaderText = "点数";
                dataGridView1.Columns[2].HeaderText = "氏名";
                dataGridView1.Columns[3].HeaderText = "クラス名";
    
                // データを追加
                dataGridView1.Rows.Add("国語", 90, "田中 一郎", "A");
                dataGridView1.Rows.Add("数学", 50, "鈴木 二郎", "A");
                dataGridView1.Rows.Add("英語", 90, "佐藤 三郎", "B");
    
                //DataGridView1でセル、行、列が複数選択されないようにする
                dataGridView1.MultiSelect = false;
                
                //セルを選択すると行全体が選択されるようにする
                dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                //インデックス1の行を選択する
                dataGridView1.Rows[1].Selected = true;
            }
        }
    
記事No.95145 のレス /過去ログ165より / 関連記事表示
削除チェック/

■95163  Re[4]: DataGridViewの選択状態を保持したい
□投稿者/ kiku -(2020/06/26(Fri) 12:55:43)
    2020/06/26(Fri) 12:57:06 編集(投稿者)

    No95162 (kiku さん) に返信
    > ■No95156 (かつお節味噌汁 さん) に返信
    >>■No95146 (kiku さん) に返信
    > >>■No95145 (かつお節味噌汁 さん) に返信
    >>申し訳ございません。
    >>参考サイトを元に書いてみたのですが、どうも
    >>理解が及ばず選択状態を維持することがかないません。
    >>よろしければ他の参考サイトや、アドバイスを頂けると幸いです。

    名前で検索したければこんな感じ

    private void button2_Click(object sender, EventArgs e)
    {
    foreach(DataGridViewRow row in dataGridView1.Rows)
    {
    //インデクス2の名前を取得する
    var name = (string)row.Cells[2].Value;
    if(name == "佐藤 三郎")
    {
    row.Selected = true;
    break;
    }
    }
    }
記事No.95145 のレス /過去ログ165より / 関連記事表示
削除チェック/

■100235  Re[3]: ASCIIファイルから数値データを高速読み出し
□投稿者/ 魔界の仮面弁士 -(2022/07/12(Tue) 12:05:46)
    No100217 (魔界の仮面弁士) に追記
    > そもそも Val と CSng と Single.Parse では、それぞれの変換仕様が
    > 微妙に異なっているので、ロジックだけでは単純比較ができませんでした。
    > パフォーマンスの差は、実際に測定してみないと分からない所ですね。
    
    No100223 の伝説のカレーさんの投稿で、速度面で Val の優位性が明らかに…!
    .NET Core、.NET Framework バージョンの差でも変わってきたりするんでしょうかね。
    
    CSng は全角数字も解釈するので、多分遅いとは思ってましたが、Val が予想以上にはやくて吃驚です。
    
    
    以下、それぞれの変換仕様の差について例示。
    
    たまに「Val だと変換エラーにならない」と書かれた記事を見ることがあるので、その否定を兼ねて…。
    なお CSng の変換仕様は、VBA と .NET では異なります。
    
    
    "1,234.56" を変換した場合
     Single.Parse(s) → 1234.56F
     CSng(s)         → 1234.56F
     CSng(Val(s))    → 1.0F
    
    "1d 3h" を変換した場合
     Single.Parse(s) → エラー
     CSng(s)         → エラー
     CSng(Val(s))    → 1000.0F
    
    "123.4.5" を変換した場合
     Single.Parse(s) → エラー
     CSng(s)         → エラー
     CSng(Val(s))    → 123.4F
    
    "&H12" を変換した場合
     Single.Parse(s) → エラー
     CSng(s)         → 18.0F
     CSng(Val(s))    → 18.0F
    
    "&o123" を変換した場合
     Single.Parse(s) → エラー
     CSng(s)         → 83.0F
     CSng(Val(s))    → 83.0F
    
    "100%" を変換した場合
     Single.Parse(s) → エラー
     CSng(s)         → エラー
     CSng(Val(s))    → 100.0F
    
    "1.23%" を変換した場合
     Single.Parse(s) → エラー
     CSng(s)         → エラー
     CSng(Val(s))    → エラー ※Val がエラーを返すパターン
    
    "1.23" を変換した場合
     Single.Parse(s) → エラー
     CSng(s)         → 1.23F
     CSng(Val(s))    → 0.0F
    
    "(12.34)" を変換した場合
     Single.Parse(s) → エラー
     CSng(s)         → -12.34F
     CSng(Val(s))    → 0.0F
    
    "1.23E+45" を変換した場合
     Single.Parse(s) → エラー
     CSng(s)         → エラー
     CSng(Val(s))    → Single.Infinity
    
    "∞" を変換した場合
     Single.Parse(s) → Single.Infinity
     CSng(s)         → Single.Infinity
     CSng(Val(s))    → 0.0F
記事No.100187 のレス /過去ログ174より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -