頑張って書いてるんですが時間掛かってます。やる事が多過ぎて時短は厳しい😓
今後この画面にLightGBMやTensorFlow使った予測も入れ込めれば64bit化した恩恵が更に深まる。この辺りは優先的に進めたいと思ってます。特にTensorFlowの予測に期待しているので早い段階で使える事が確認出来れば学習も同時に進められるので効率も良いかも。
頑張って書いてるんですが時間掛かってます。やる事が多過ぎて時短は厳しい😓
今後この画面にLightGBMやTensorFlow使った予測も入れ込めれば64bit化した恩恵が更に深まる。この辺りは優先的に進めたいと思ってます。特にTensorFlowの予測に期待しているので早い段階で使える事が確認出来れば学習も同時に進められるので効率も良いかも。
BIGって発売当初からほぼ買ってます。まあ、色々とね。これまで末等の数百円とかはありました。普通のBIGは確か末等の次は千円程度の当りもあったかとおもいますが、それなんかも当りって感じではなく、まあ、宝くじの下1桁的な感覚のものですよね。だって開始当初は今の数百円の末等は無く、千円程度が末等だった記憶です。でまあ、今回当たったのは、高額ではないのですが、
開発もしてますよ。
WinUI3のデータグリッドでは基本的にDataGridTextColumnを使いますが、文字の色や背景、ツールチップを追加等は派生クラスをいちいち定義するのが結局一番効率が良いのかな?例えばタイム型データマイニングだと
- internal class DataGridTextColumnTimeDM : DataGridTextColumn
- {
- protected override FrameworkElement GenerateElement(DataGridCell cell, object dataItem)
- {
- Border border = new Border
- {
- HorizontalAlignment = HorizontalAlignment.Stretch, // セル内で均等に広がる
- VerticalAlignment = VerticalAlignment.Stretch, // 上下も均等に広がる
- Padding = new Thickness(5) // 適度な余白
- };
- TextBlock textBlock = new TextBlock
- {
- TextAlignment = TextAlignment.Center, // テキストを中央揃え
- HorizontalAlignment = HorizontalAlignment.Center, // 左右中央揃え
- VerticalAlignment = VerticalAlignment.Center // 上下中央揃え
- };
- if (dataItem is RaceDetailInfo item)
- {
- textBlock.Text = item.TimeDM;
- // 現在のテーマを取得
- var theme = Application.Current.RequestedTheme;
- // 文字色を変更
- switch (item.TimeDMRank)
- {
- case 1:
- border.Background = new Microsoft.UI.Xaml.Media.SolidColorBrush(SaraD64Constants.BackColor1);
- textBlock.Foreground = new SolidColorBrush(Colors.Black);
- break;
- case 2:
- border.Background = new Microsoft.UI.Xaml.Media.SolidColorBrush(SaraD64Constants.BackColor2);
- textBlock.Foreground = new SolidColorBrush(Colors.Black);
- break;
- case 3:
- border.Background = new Microsoft.UI.Xaml.Media.SolidColorBrush(SaraD64Constants.BackColor3);
- textBlock.Foreground = new SolidColorBrush(Colors.Black);
- break;
- default: // その他
- textBlock.Foreground = new SolidColorBrush(theme == ApplicationTheme.Dark ? Colors.White : Colors.Black);
- break;
- }
- // ツールチップ追加
- ToolTipService.SetToolTip(textBlock, item.TimeDMToolTip);
- }
- border.Child = textBlock; // Border に TextBlock を含める
- return border;
- }
- }
ああ、現在のテーマチェックして一応ダークモードとライトモードで切り替えは自分でやる必要があるっぽい。まっ、テーマ的に全て色を統一してれば自動にって方法があるのかもですが、これまで色にあくまでも近い形にしたいので深く考えずに少しだけ考慮しておこうかと。ただ、実際自分はダークモードしか使わないので、一通り形になった時に念のためにライトモードは試してからリリースしなきゃだなぁっと。
まだまだ全然途中ですが、
滅茶苦茶堅そうだけど、まあ、グランプリだしちょっとだけ参戦😉
ああ、13年程度使ってきた三菱の冷蔵庫が...製氷機能がダメだ。まあ、この冷蔵庫は問題多過ぎで、買った時から気になってたけど、氷庫の裏側に氷が頻繁に落ちる。オフシーズンに氷をあまり使わないとカビが発生する。現在の三菱の冷蔵庫もこの氷が裏側に落ちるらしいので選択肢から排除。うちは元々パナで3台程度ハズレ引いたのでパナも除外してます。残るは日立か東芝か?悩む所ですが、東芝が気になるのは問い合わせ先。フリーダイヤルがあるんですが、携帯電話はナビダイヤル。以前もここに書いた気がするけど、このナビダイヤルに掛けさせる企業の姿勢が本当に疑問。こちらがかけ放題や無料通話アプリでもナビダイヤルは課金されます。なら、普通の固定電話番号を用意してくれた方がどうとでもなる。フリーダイヤルは携帯番号認識して撥ねられる。固定電話なんて既に解約済みです。時代にマッチしない企業にはあまり関わり持ちたくないんですよねぇ。
Windowsフォームアプリでは
- var columnNames = new string[]
- {
- "umaban", "bamei", "kishu", "choukyosi", "tansho", "fukusho", "bataijyu", "mark", "chaku"
- };
- var columnHeader = new string[]
- {
- "馬番", "馬名", "騎手", "調教師", "単勝", "複勝", "馬体重", "印", "着順"
- };
- var columnWidth = new int[]
- {
- 30, 201, 88, 88, 60, 130, 60, 30, 30
- };
- for (int i = 0; i < columnNames.Length; i++)
- {
- DataGridViewColumn tbCol = new DataGridViewTextBoxColumn();
- tbCol.Name = columnNames[i];
- tbCol.HeaderText = columnHeader[i];
- tbCol.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
- tbCol.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
- tbCol.ReadOnly = true;
- tbCol.SortMode = DataGridViewColumnSortMode.NotSortable;
- dgv.Columns.Add(tbCol);
- dgv.Columns[columnNames[i]].Width = columnWidth[i];
- }
って感じでC#で定義してたりしました。素人的にWin UI3でデータグリッド使うにはxamlで
- <Grid Grid.Row="1">
- <controls:DataGrid x:Name="RaceDetailGrid"
- AutoGenerateColumns="False" HeadersVisibility="Column"
- CanUserResizeColumns="False" SelectionMode="Single" RowHeight="30" CanUserSortColumns="False"
- >
- <controls:DataGrid.Columns>
- <controls:DataGridTextColumn Header="馬番" Binding="{Binding Umaban}" Width="60"/>
- <controls:DataGridTextColumn Header="馬名" Binding="{Binding Bamei}" Width="200"/>
- <controls:DataGridTextColumn Header="服" Binding="{Binding Fuku}" Width="80"/>
- <controls:DataGridTextColumn Header="騎手" Binding="{Binding Kishu}" Width="120"/>
- <controls:DataGridTextColumn Header="調教師" Binding="{Binding Chokyosi}" Width="120"/>
- <controls:DataGridTextColumn Header="単勝" Binding="{Binding Tansho}" Width="80"/>
- <controls:DataGridTextColumn Header="複勝" Binding="{Binding Fukusho}" Width="140"/>
- <controls:DataGridTextColumn Header="馬体重" Binding="{Binding Bataiju}" Width="100"/>
- <controls:DataGridTextColumn Header="印" Binding="{Binding Mark}" Width="60"/>
- <controls:DataGridTextColumn Header="着順" Binding="{Binding Chaku}" Width="80"/>
- </controls:DataGrid.Columns>
- </controls:DataGrid>
- </Grid>
としてみてたのですが、今後こんなの増えてくるとってのと今回カスタム列タイプも試したのでその為にもスマートに定義が出来ればと思い、Copilotに質問ぶつけて得た方法は
- public class DataGridColumnDefinition
- {
- public string Header { get; set; }
- public string BindingPath { get; set; }
- public int Width { get; set; }
- public string ColumnType { get; set; } // 列の種類を文字列で管理
- }
として定義用クラスを用意し、
- private void DesignRaceDetailGrid(DataGrid dataGrid)
- {
- var columnDefinitions = new List<DataGridColumnDefinition>
- {
- new DataGridColumnDefinition { Header = "馬番", BindingPath = "Umaban", Width = 60, ColumnType = "Text" },
- new DataGridColumnDefinition { Header = "馬名", BindingPath = "Bamei", Width = 200, ColumnType = "Text" },
- new DataGridColumnDefinition { Header = "服", BindingPath = "Fuku", Width = 80, ColumnType = "Text" },
- new DataGridColumnDefinition { Header = "騎手", BindingPath = "Kishu", Width = 120, ColumnType = "Text" },
- new DataGridColumnDefinition { Header = "調教師", BindingPath = "Chokyosi", Width = 120, ColumnType = "Text" },
- new DataGridColumnDefinition { Header = "単勝", BindingPath = "Tansho", Width = 80, ColumnType = "Text" },
- new DataGridColumnDefinition { Header = "複勝", BindingPath = "Fukusho", Width = 140, ColumnType = "Text" },
- new DataGridColumnDefinition { Header = "馬体重", BindingPath = "Bataiju", Width = 100, ColumnType = "Text" },
- new DataGridColumnDefinition { Header = "印", BindingPath = "Mark", Width = 60, ColumnType = "Text" },
- new DataGridColumnDefinition { Header = "着順", BindingPath = "Chaku", Width = 60, ColumnType = "Text" },
- };
- foreach (var column in columnDefinitions)
- {
- DataGridColumn dataGridColumn;
- switch (column.ColumnType)
- {
- case "Text":
- dataGridColumn = new DataGridTextColumn
- {
- Header = column.Header,
- Binding = new Binding { Path = new PropertyPath(column.BindingPath) },
- Width = new DataGridLength(column.Width, DataGridLengthUnitType.Pixel)
- };
- break;
- default:
- throw new InvalidOperationException($"未対応の列タイプ: {column.ColumnType}");
- }
- dataGrid.Columns.Add(dataGridColumn);
- }
- }
定義しやすさとメンテしやすさと思ってしてみました。
自分自身も期待している部分もあるのでちょっとだけ頑張ってはいるんですが、例えば、アプリの終了です。こんなのこれまでWindowsアプリだろうと、言っちゃえばDOSや他のOSなんかでも普通に終了的にすれば問題無いのに、Win UI3だと違うっぽいです。これで昨晩かなり時間を費やしました。
基本的にWin UI3なら
- Application.Current.Exit(); // アプリケーションを終了
とすれば良いってCopilotとかに言われてしても、終了時にエラーが出るしまつorz まあ、そんなのはいつもの事なので、更に突っ込んだ質問ぶつけてもなかなか良い回答は得られずでしたが、結局の所
- Process.GetCurrentProcess().Kill(); // アプリを強制終了
とすれば、一応エラー無しで終われる事を確認しました。が、なんでそんな事に時間費やすんだろうって疑問はねぇ^^; まあ、なにやらリソースが解放されてないのがって事ではって話だが、そんなの勝手に処理しろよってね。でまあ、