質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

解決済

C# comboBoxItemを.csにて追加したいです.

Okachan
Okachan

総合スコア9

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

2回答

0評価

1クリップ

577閲覧

投稿2021/10/23 10:54

編集2021/10/25 16:47

###はじめに
いろいろと無駄なソースや美しくないと思いますのでご了承下さい.
そのうえでこのようにすれば「綺麗なソースになるよ!」などのアドバイスも頂けたら嬉しいです.
最終的には総合的なアプリケーションにする予定なのでプラグイン化(できるかは別として)する予定です.

前提・実現したいこと

C#にてスケジューラーを作っています.
XAMLでは<ComboBoxItem ~~>と書けば追加されるのはわかりますが,ソースファイルでの追加方法が分かりません.
実現したいのはfor文で回した変数iを追加していくプログラムです.

また数が多くなることも想定してBeginUpdateとEndUpdateを使用してみたいと考えておりましたがその2つのメソッドは使えないのでしょうか?
使用可能でしたらそちらの回答でよろしくお願いします.

該当のソースコード

C#

private void addbox_ym(object sender, EventArgs e) { for(int i = 1999; i < 2101; i++) { //selectedYM.Items.Add("test" + i.ToString()); } }

全体のソースコード

XAML

<Window x:Class="TotalApplication.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:TotalApplication" mc:Ignorable="d" Title="スケジュール表" Height="450" Width="800" MinHeight="225" MinWidth="500"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="24*"/> <RowDefinition Height="395*"/> </Grid.RowDefinitions> <GroupBox x:Name="CalendarGroup1" Header="" Margin="10,16.216,10,10" Grid.Row="1"> <Grid x:Name="CalenderGrid"> <Grid.ColumnDefinitions> <ColumnDefinition Width="1*"/> <ColumnDefinition Width="1*"/> <ColumnDefinition Width="1*"/> <ColumnDefinition Width="1*"/> <ColumnDefinition Width="1*"/> <ColumnDefinition Width="1*"/> <ColumnDefinition Width="1*"/> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="20"/> <RowDefinition Height="15"/> <RowDefinition Height="1*"/> <RowDefinition Height="15"/> <RowDefinition Height="1*"/> <RowDefinition Height="15"/> <RowDefinition Height="1*"/> <RowDefinition Height="15"/> <RowDefinition Height="1*"/> <RowDefinition Height="15"/> <RowDefinition Height="1*"/> <RowDefinition Height="15"/> <RowDefinition Height="1*"/> </Grid.RowDefinitions> <Rectangle Stroke="Black" StrokeThickness="1" Grid.ColumnSpan="7" Grid.RowSpan="13"/> <Rectangle Fill="#ff8000" HorizontalAlignment="Stretch" Grid.Row="0" Grid.Column="0" VerticalAlignment="Stretch" Margin="1 1 0 0" Panel.ZIndex="0"/> <!--5行略--> <Rectangle Fill="#ff8000" HorizontalAlignment="Stretch" Grid.Row="0" Grid.Column="6" VerticalAlignment="Stretch" Margin="1 1 1 0" Panel.ZIndex="0"/> <Rectangle Fill="#d3d3d3" HorizontalAlignment="Stretch" Grid.Row="1" Grid.Column="0" VerticalAlignment="Stretch" Margin="1 1 0 0" Panel.ZIndex="0"/> <!--47行略--> <Rectangle Fill="#d3d3d3" HorizontalAlignment="Stretch" Grid.Row="11" Grid.Column="6" VerticalAlignment="Stretch" Margin="1 1 0 0" Panel.ZIndex="0"/> <Label Content="日" HorizontalAlignment="Center" Grid.Row="0" Grid.Column="0" VerticalAlignment="Center" FontSize="11" Padding="0"/> <!--曜日略--> <Label Content="土" HorizontalAlignment="Center" Grid.Row="0" Grid.Column="6" VerticalAlignment="Center" FontSize="11" Padding="0"/> </Grid> </GroupBox> <Label Content="選択した年月: " HorizontalAlignment="Left" Margin="10,15,0,0" VerticalAlignment="Top" Grid.RowSpan="2"/> <Label x:Name="today" Content="今日の日付: " HorizontalAlignment="Left" Margin="250,15,0,0" VerticalAlignment="Top" Grid.RowSpan="2"/> <ComboBox x:Name="selectedYM" HorizontalAlignment="Left" Margin="95,15,0,0" VerticalAlignment="Top" Width="60" Grid.RowSpan="2"> </ComboBox> </Grid> </Window>

C#

using System; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using System.Windows.Media; using System.Windows.Shapes; namespace TotalApplication { /// <summary> /// MainWindow.xaml の相互作用ロジック /// </summary> public partial class MainWindow : Window { /// <summary> /// 各宣言の説明 /// </summary> /// <param name="sRsC">シングルクリック</param> /// <param name="sRdC">ダブルクリック</param> /// <param name="lastClick">最後にクリックした時間</param> /// <param name="clickTimer">クリック判定用時間</param> /// <param name="dC">ダブルクリックが有効な時True</param> private Rectangle sRsC; //private Rectangle sRdC; //private DateTime lastClick; //private TimeSpan clickTimer; //private bool dC; /// <summary> /// MainWindow /// </summary> public MainWindow() { InitializeComponent(); CalendarGroup1.Header = String.Format("{0:yyyy年MM月}", DateTime.Now); today.Content = String.Format("今日の日付: {0:yyyy年MM月dd日}", DateTime.Now); //当月の月初を取得 var firstDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1); //曜日の取得 int dayofweek = (int)firstDate.DayOfWeek; //月末を取得 int lastday = firstDate.AddMonths(1).AddDays(-1).Day; //月初から月末までを走査 for (int day = 1; day <= lastday; day++) { //セル位置 int index = (day - 1) + dayofweek; //横位置 int x = index % 7; //縦位置 int y = index / 7; //土日の色変更 Color color = Colors.Black; if (x == 0) { color = Colors.Red; } else if (x == 6) { color = Colors.Blue; } //テキストブロックを生成して日付をグリッドに追加 var tb_day = new TextBlock() { Text = string.Format("{0}", day), FontSize = 10, Foreground = new SolidColorBrush(color), Padding = new Thickness(5, 0, 0, 0), HorizontalAlignment = HorizontalAlignment.Left, VerticalAlignment = VerticalAlignment.Top }; this.CalenderGrid.Children.Add(tb_day); tb_day.SetValue(Grid.ColumnProperty, x); tb_day.SetValue(Grid.RowProperty, 1 + 2 * y); //テキストブロックを生成してメモをグリッドに追加(未実装) var tb_memo = new TextBlock() { Text = string.Format("test"), FontSize = 10, Foreground = new SolidColorBrush(color = Colors.Black), Padding = new Thickness(5, 0, 0, 0), HorizontalAlignment = HorizontalAlignment.Left, VerticalAlignment = VerticalAlignment.Top }; this.CalenderGrid.Children.Add(tb_memo); tb_memo.SetValue(Grid.ColumnProperty, x); tb_memo.SetValue(Grid.RowProperty, 2 + 2 * y); //四角形を生成してグリッドに追加 //セルの枠線などを表示しイベントをハンドリングする用 var rect = new Rectangle(); rect.HorizontalAlignment = HorizontalAlignment.Stretch; rect.VerticalAlignment = VerticalAlignment.Stretch; //背景色 rect.Fill = Brushes.Transparent; //枠線調整 rect.Margin = (x == 6) ? new Thickness(0.0, -1.0, 0.0, 0.0) : new Thickness(0.0, -1.0, 0.0, 0.0); //イベント設定 rect.MouseLeftButtonDown += date_mouseleftbuttondown; this.CalenderGrid.Children.Add(rect); rect.SetValue(Grid.ColumnProperty, x); rect.SetValue(Grid.RowProperty, 2 + 2 * y); } } /// <summary> /// セル(日)をクリックした際のイベントハンドラ. /// </summary> /// <param name="sender"></param> /// <param name="e"></param> //選択時の枠組み生成 void date_mouseleftbuttondown(object sender, MouseButtonEventArgs e) { //既に選択されたセルがある場合は初期化 if (sRsC != null) { sRsC.StrokeDashArray = null; sRsC.StrokeThickness = 0; } //枠線に点線セット Rectangle rec = sender as Rectangle; rec.Stroke = Brushes.Black; DoubleCollection dbc = new DoubleCollection(); dbc.Add(1); rec.StrokeDashArray = dbc; rec.StrokeThickness = 1; //選択セルの保持 sRsC = rec; } private void addbox_ym(object sender, EventArgs e) { for(int i = 1999; i < 2101; i++) { //selectedYM.Items.Add("test" + i.ToString()); } } } }

試したこと

この問題を解決するために様々なサイトを見てきましたがたいていの場合,Buttonのクリックイベントに反応するように作られているの多くわかりませんでした.

###今後の予定
・クリックしたときに枠線が日付部分まで囲われないので修正できたら修正したいと思います.
・年月別々のcomboBoxを作り指定された年月のカレンダーを表示させる予定です.
・追加機能としてはダブルクリックした後にメモが書けるようにしたいと考えています.

補足情報(FW/ツールのバージョンなど)

Windows10
Visual Studio 2019 16.2.5
WPFアプリ
.NET Framework 4.7.2

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

SurferOnWww

2021/10/23 11:28

何を作っているかと開発環境ぐらいは書きませんか?
Okachan

2021/10/23 12:33

ご連絡ありがとうございます. 補足情報にVisualStudio2019, 前提・実現したいことに何を作っているかなどの記載をしておりますが, 何が足りないのか教えていただけないでしょうか? ご連絡お願い致します.
SurferOnWww

2021/10/23 13:10

何を作っているか? ⇒ WinForms, WPF, ASP.NET Web Forms, その他いろいろあるが何か 開発環境 ⇒ OS は何か、.NET か Core のどっちかとそのバージョン
Okachan

2021/10/23 15:04

例などを挙げてくださりありがとうございます. 現在,WPFアプリ(.NET Framework)を使って開発しており,アプリケーションのプロパティでは, .NET Framework 4.7.2 出力の種類:Windowsアプリケーション アセンブリバージョンは1.0.0.0です. これを編集し直せばよろしいでしょうか? いまだ使い慣れておらずお手数おかけしますがご回答よろしくお願いします.
gentaro

2021/10/24 00:22

どうやったらMethodを「メゾッド」と間違えるんだろう。こういう人多いけど。 thだったら「ソ」でしょう。zの音はどっから拾ってるんだ。
SurferOnWww

2021/10/24 00:38 編集

OS も書いてください。Windows 10?  過去に、話を進めていって、どうも話が合わないと思っていたら、実は Mac (Visual Studio も Mac 用)だったということも ありましたので。また、追加の情報は質問欄を編集して追記願います。(例: Windows 10, Visual Studio 2019 16.11.5, WPF アプリ、.NET Framework 4.7.2) > BeginUpdateとEndUpdateを使用してみたい Windows Forms アプリ用の ComboBox と混同してませんか? WPF 用にはそういうメソッドは無いようですが。 https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.controls.combobox?view=netframework-4.7.2 もし混同していて、質問内容に矛盾があるようでしたら、質問を見直してください。
TN8001

2021/10/24 01:08

WPF タグがありますので追加してください^^
fana

2021/10/24 01:17

> どうやったらMethodを「メゾッド」と間違えるんだろう 犯人は「リゾット」説: 初見時に "Method" という表記ではなく「メソッド」というカタカナ表記に出会う + その瞬間に既存の「リゾット」という単語と頭の中で混じる = 結果として「メソット」とか「メゾッド」とか認識する

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです