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

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

新規登録して質問してみよう
ただいま回答率
85.48%
DateTime

多くのプログラミング言語におけるDateTimeオブジェクトは、日付と時間に関する演算と出力を行います。

C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

コンボボックス

GUIの要素のひとつです。Listboxと同様にいくつかのうちひとつを選択する機能だが、Comboboxの場合は選択されたもののみがデフォルトとして表示される。

WPF

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

Q&A

解決済

2回答

3450閲覧

VS2019 CS1016 月表示カレンダーの日付変更を行いたい

Hiroki.T

総合スコア1

DateTime

多くのプログラミング言語におけるDateTimeオブジェクトは、日付と時間に関する演算と出力を行います。

C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

コンボボックス

GUIの要素のひとつです。Listboxと同様にいくつかのうちひとつを選択する機能だが、Comboboxの場合は選択されたもののみがデフォルトとして表示される。

WPF

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

1グッド

1クリップ

投稿2020/05/06 03:53

前提・実現したいこと

月表示カレンダーで日付をラベルのListによって表示させたいと考えています。

コンボボックスで年と月を指定し、その通りのカレンダーにしたいのですが、
var firstDate = new DateTime(int.Parse(ChangeYEAR.GetYear() ), int.Parse(ChangeMONTH.getmonth() ) );
のgetyear,getmonthのエラーCS1061が起こります。

ここの改善方法を教えてください。

発生している問題・エラーメッセージ

'MainWindow' に 'ChangYEAR_SelectionChanged' の定義が含まれておらず、型 'MainWindow' の最初の引数を受け付けるアクセス可能な拡張メソッド 'ChangYEAR_SelectionChanged' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足していないことを確認してください。(11)

コンボボックスに'getyear'('getmonth')の定義が含まれておらず、型 'ComboBox' の最初の引数を受け付けるアクセス可能な拡張メソッド 'GetYear' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足していないことを確認してください。(61)

該当のソースコード

C#

1 2using System; 3using System.Collections.Generic; 4using System.Linq; 5using System.Text; 6using System.Threading.Tasks; 7using System.Windows; 8using System.Windows.Controls; 9using System.Windows.Data; 10using System.Windows.Documents; 11using System.Windows.Input; 12using System.Windows.Media; 13using System.Windows.Media.Imaging; 14using System.Windows.Navigation; 15using System.Windows.Shapes; 16 17namespace calender_otomo 18{ 19 /// <summary> 20 /// MainWindow.xaml の相互作用ロジック 21 /// </summary> 22 public partial class MainWindow : Window 23 { 24 private bool combbox_change = true; 25 26 public MainWindow() 27 { 28 DateTime now = DateTime.Now; 29 List<int> years = new List<int>() ; 30 int[] month = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }; 31 32 InitializeComponent(); 33 34 //前後10年の算出 35 for (int i = (now.Year - 10); i <= (now.Year) + 10; i++) 36 { 37 years. Add( i) ; 38 39 } 40 41 //コンボボックスの設定 42 ChangeYEAR.ItemsSource =years; 43 ChangeMONTH.ItemsSource =month; 44 45 46 combbox_change = false; 47 ChangeYEAR.SelectedIndex = 10; 48 combbox_change = true; 49 ChangeMONTH.SelectedIndex = now.Month - 1; 50 51 //ラベルのList化 52 List<Label> test = new Label<Label>(); 53 test.Add(Su1); 、、、 test.Add(Sa6); 54 55 56 57 var firstDate = new DateTime(int.Parse(ChangeYEAR.GetYear() ), int.Parse(ChangeMONTH.getmonth() ) ); 58 59 int dayOFWeek = (int)firstDate.DayOfYear; 60 int lastday = firstDate.AddMonths(1).AddDays(-1).Day; 61 62 for (int day = 1; day <= lastday; day++) 63 { 64 int index = (day - 1) + dayOFWeek; 65 int x = index % 7; 66 int y = index / 7; 67 68 test[day].Content = day; 69 } 70 71 72 73 } 74 75 /// コンボボックス接続 76 private void SelectionChanged(object sender, SelectionChangedEventArgs e) 77 { 78 //ラベルのList化 79 List<Label> test = new Label<Label>(); 80 test.Add(Su1); 、、、 test.Add(Sa6); 81//ラベルは一部省略 82 83 List calender = new List(); 84 85 if (combbox_change != true) 86 { 87 return; 88 } 89 90 List.Content (Convert.ToInt32(ChangeYEAR.SelectedItem), Convert.ToInt32(ChangeMONTH.SelectedItem)); 91 Calender_update(); 92 93 } 94 95 private void Calender_update() 96 { 97 throw new NotImplementedException(); 98 } 99 100 101 //コンボボックスに今の年月を設定 102 private void Today_Click(object sender, RoutedEventArgs e) 103 { 104 DateTime now = DateTime.Now; 105 106 ChangeYEAR.SelectedIndex = 10; 107 ChangeMONTH.SelectedIndex = now.Month - 1; 108 } 109 110 private void ChangeMONTH_SelectionChanged(object sender, SelectionChangedEventArgs e) 111 { 112 } 113 114 private class Label<T> : List<Label> 115 { 116 } 117 } 118}

試したこと

ChangYEAR.SelectedItemをint型に変換

そのほか、「考えられる修正内容」と出た
List.Content (Convert.ToInt32(ChangeYEAR.SelectedItem), Convert.ToInt32(ChangeMONTH.SelectedItem));
Calender_update();
でのContent部分やToInt32の箇所の修正

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

FWは4.7.2です

この春から学び始めています。
参考書などは調べたところKindleが多いようですが、オススメないし初心者向けのものがあれば教えてください

TN8001👍を押しています

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

文字数上限で追記出来なかったため別回答にさせてください。

ItemsControlを使った例

xml

1<Window 2 x:Class="Questions259221.MainWindow" 3 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 4 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 5 xmlns:sys="clr-namespace:System;assembly=mscorlib" 6 SizeToContent="WidthAndHeight"> 7 <StackPanel> 8 <StackPanel Orientation="Horizontal"> 9 <ComboBox 10 x:Name="ChangeYEAR" 11 Width="100" 12 SelectionChanged="SelectionChanged" /> 13 <ComboBox 14 x:Name="ChangeMONTH" 15 Width="100" 16 SelectionChanged="SelectionChanged" /> 17 <Button 18 x:Name="Today" 19 Click="Today_Click" 20 Content="Today" /> 21 </StackPanel> 22 23 <StackPanel Orientation="Horizontal"> 24 25 <!-- 選択したい場合 --> 26 <ListBox 27 x:Name="calendarSelector" 28 Width="300" 29 AlternationCount="7"> 30 <ItemsControl.Template> 31 <ControlTemplate TargetType="ItemsControl"> 32 <ControlTemplate.Resources> 33 <Style TargetType="{x:Type TextBlock}"> 34 <Setter Property="VerticalAlignment" Value="Center" /> 35 <Setter Property="HorizontalAlignment" Value="Center" /> 36 </Style> 37 </ControlTemplate.Resources> 38 <Border 39 Background="Azure" 40 BorderBrush="Black" 41 BorderThickness="1"> 42 <StackPanel> 43 <UniformGrid Margin="10,10,10,0" Columns="7"> 44 <TextBlock Foreground="Red" Text="Sun" /> 45 <TextBlock Text="Mon" /> 46 <TextBlock Text="Tue" /> 47 <TextBlock Text="Wed" /> 48 <TextBlock Text="Thu" /> 49 <TextBlock Text="Fri" /> 50 <TextBlock Foreground="Blue" Text="Sat" /> 51 </UniformGrid> 52 <ItemsPresenter Margin="10" /> 53 </StackPanel> 54 </Border> 55 </ControlTemplate> 56 </ItemsControl.Template> 57 <ItemsControl.ItemsPanel> 58 <ItemsPanelTemplate> 59 <UniformGrid Columns="7" /> 60 </ItemsPanelTemplate> 61 </ItemsControl.ItemsPanel> 62 <ItemsControl.ItemTemplate> 63 <DataTemplate> 64 <Label 65 HorizontalContentAlignment="Center" 66 VerticalContentAlignment="Center" 67 Content="{Binding Day}" 68 Foreground="{Binding Foreground, RelativeSource={RelativeSource AncestorType=ListBoxItem}}" /> 69 </DataTemplate> 70 </ItemsControl.ItemTemplate> 71 <ItemsControl.ItemContainerStyle> 72 <Style TargetType="ListBoxItem"> 73 <Setter Property="HorizontalContentAlignment" Value="Stretch" /> 74 <Setter Property="VerticalContentAlignment" Value="Stretch" /> 75 <Style.Triggers> 76 <Trigger Property="ItemsControl.AlternationIndex" Value="0"> 77 <Setter Property="Foreground" Value="Red" /> 78 </Trigger> 79 <Trigger Property="ItemsControl.AlternationIndex" Value="6"> 80 <Setter Property="Foreground" Value="Blue" /> 81 </Trigger> 82 <DataTrigger Binding="{Binding}" Value="{x:Static sys:DateTime.MinValue}"> 83 <Setter Property="Visibility" Value="Hidden" /> 84 </DataTrigger> 85 </Style.Triggers> 86 </Style> 87 </ItemsControl.ItemContainerStyle> 88 </ListBox> 89 90 <!-- 表示だけの場合 --> 91 <ItemsControl 92 x:Name="calendarView" 93 Width="300" 94 AlternationCount="7"> 95 <ItemsControl.Template> 96 <ControlTemplate TargetType="ItemsControl"> 97 <ControlTemplate.Resources> 98 <Style TargetType="{x:Type TextBlock}"> 99 <Setter Property="VerticalAlignment" Value="Center" /> 100 <Setter Property="HorizontalAlignment" Value="Center" /> 101 </Style> 102 </ControlTemplate.Resources> 103 <Border 104 Background="Azure" 105 BorderBrush="Black" 106 BorderThickness="1"> 107 <StackPanel> 108 <UniformGrid Margin="10,10,10,0" Columns="7"> 109 <TextBlock Foreground="Red" Text="Sun" /> 110 <TextBlock Text="Mon" /> 111 <TextBlock Text="Tue" /> 112 <TextBlock Text="Wed" /> 113 <TextBlock Text="Thu" /> 114 <TextBlock Text="Fri" /> 115 <TextBlock Foreground="Blue" Text="Sat" /> 116 </UniformGrid> 117 <ItemsPresenter Margin="10" /> 118 </StackPanel> 119 </Border> 120 </ControlTemplate> 121 </ItemsControl.Template> 122 <ItemsControl.ItemsPanel> 123 <ItemsPanelTemplate> 124 <UniformGrid Columns="7" /> 125 </ItemsPanelTemplate> 126 </ItemsControl.ItemsPanel> 127 <ItemsControl.ItemTemplate> 128 <DataTemplate> 129 <Label 130 HorizontalContentAlignment="Center" 131 VerticalContentAlignment="Center" 132 Content="{Binding Day}" 133 Foreground="{Binding Tag, RelativeSource={RelativeSource AncestorType=ContentPresenter}}" /> 134 </DataTemplate> 135 </ItemsControl.ItemTemplate> 136 <ItemsControl.ItemContainerStyle> 137 <Style TargetType="ContentPresenter"> 138 <Setter Property="Tag" Value="Black" /> 139 <Style.Triggers> 140 <Trigger Property="ItemsControl.AlternationIndex" Value="0"> 141 <Setter Property="Tag" Value="Red" /> 142 </Trigger> 143 <Trigger Property="ItemsControl.AlternationIndex" Value="6"> 144 <Setter Property="Tag" Value="Blue" /> 145 </Trigger> 146 <DataTrigger Binding="{Binding}" Value="{x:Static sys:DateTime.MinValue}"> 147 <Setter Property="Visibility" Value="Hidden" /> 148 </DataTrigger> 149 </Style.Triggers> 150 </Style> 151 </ItemsControl.ItemContainerStyle> 152 </ItemsControl> 153 154 <!-- カレンダーを出したいだけなら --> 155 <Viewbox Width="300"> 156 <Calendar x:Name="calendar" IsHitTestVisible="False" /> 157 </Viewbox> 158 </StackPanel> 159 160 <TextBlock Text="{Binding SelectedItem, ElementName=calendarSelector, StringFormat=yyyy年MM月dd日}" /> 161 162 </StackPanel> 163</Window>

cs

1using System; 2using System.Linq; 3using System.Windows; 4using System.Windows.Controls; 5 6namespace Questions259221 7{ 8 public partial class MainWindow : Window 9 { 10 public MainWindow() 11 { 12 InitializeComponent(); 13 14 var now = DateTime.Now; 15 ChangeYEAR.ItemsSource = Enumerable.Range(now.Year - 10, 21); 16 ChangeYEAR.SelectedItem = now.Year; 17 18 ChangeMONTH.ItemsSource = Enumerable.Range(1, 12); 19 ChangeMONTH.SelectedItem = now.Month; 20 } 21 22 private void SelectionChanged(object sender, SelectionChangedEventArgs e) 23 { 24 if(ChangeYEAR.SelectedItem is int year && ChangeMONTH.SelectedItem is int month) 25 { 26 var firstDate = new DateTime(year, month, 1); 27 var lastDay = firstDate.AddMonths(1).AddDays(-1).Day; 28 var dayOfWeek = (int)firstDate.DayOfWeek; 29 30 var spacer = Enumerable.Repeat(DateTime.MinValue, dayOfWeek); 31 var days = Enumerable.Range(0, lastDay).Select(x => firstDate.AddDays(x)); 32 var items = spacer.Concat(days); 33 calendarSelector.ItemsSource = items; 34 calendarView.ItemsSource = items; 35 calendar.DisplayDate = firstDate; 36 } 37 } 38 39 private void Today_Click(object sender, RoutedEventArgs e) 40 { 41 var now = DateTime.Now; 42 ChangeYEAR.SelectedItem = now.Year; 43 ChangeMONTH.SelectedItem = now.Month; 44 calendarSelector.SelectedItem = now.Date; 45 calendar.DisplayDate = now.Date; 46 } 47 } 48}

イメージ説明

参考 ItemsControl 攻略 ~ 外観のカスタマイズ | grabacr.nét

投稿2020/05/06 14:24

編集2023/07/21 13:50
TN8001

総合スコア9317

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

参考にしたサイトかなんかがあるのでしたら、一緒に提示してください。

エラー原因

1個目

xml

1<ComboBox x:Name="ChangeYEAR" SelectionChanged="ChangYEAR_SelectionChanged"/>

xamlに↑のような表記があるのに

cs

1private void ChangYEAR_SelectionChanged(object sender, SelectionChangedEventArgs e) 2{ 3}

csに↑のようなメソッドがないため。

2個目

コンボボックスChangeYEARChangeMONTHに、GetYear()getmonth()のようなメソッドがないため。


とりあえず元コードを尊重しながら動くようにしました。
xamlがわからないのででっち上げましたが、構造は気にしないでいいです。

xml

1<ComboBox x:Name="ChangeYEAR" SelectionChanged="SelectionChanged" />

のように名前とイベントの対応があっていれば十分です。

xml

1<Window 2 x:Class="Questions259221.MainWindow" 3 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 4 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 5 Width="800" 6 Height="450"> 7 <StackPanel> 8 <StackPanel Orientation="Horizontal"> 9 <ComboBox 10 x:Name="ChangeYEAR" 11 Width="100" 12 SelectionChanged="SelectionChanged" /> 13 <ComboBox 14 x:Name="ChangeMONTH" 15 Width="100" 16 SelectionChanged="SelectionChanged" /> 17 <Button 18 x:Name="Today" 19 Click="Today_Click" 20 Content="Today" /> 21 </StackPanel> 22 23 <UniformGrid 24 Width="300" 25 Height="300" 26 HorizontalAlignment="Left" 27 VerticalAlignment="Top" 28 Columns="7"> 29 30 <Label Content="Sun" /> 31 <Label Content="Mon" /> 32 <Label Content="Tue" /> 33 <Label Content="Wed" /> 34 <Label Content="Thu" /> 35 <Label Content="Fri" /> 36 <Label Content="Sat" /> 37 38 <Label x:Name="Su1" /> 39 <Label x:Name="Mo1" /> 40 <Label x:Name="Tu1" /> 41 <Label x:Name="We1" /> 42 <Label x:Name="Th1" /> 43 <Label x:Name="Fr1" /> 44 <Label x:Name="Sa1" /> 45 46 <Label x:Name="Su2" /> 47 <Label x:Name="Mo2" /> 48 <Label x:Name="Tu2" /> 49 <Label x:Name="We2" /> 50 <Label x:Name="Th2" /> 51 <Label x:Name="Fr2" /> 52 <Label x:Name="Sa2" /> 53 54 <Label x:Name="Su3" /> 55 <Label x:Name="Mo3" /> 56 <Label x:Name="Tu3" /> 57 <Label x:Name="We3" /> 58 <Label x:Name="Th3" /> 59 <Label x:Name="Fr3" /> 60 <Label x:Name="Sa3" /> 61 62 <Label x:Name="Su4" /> 63 <Label x:Name="Mo4" /> 64 <Label x:Name="Tu4" /> 65 <Label x:Name="We4" /> 66 <Label x:Name="Th4" /> 67 <Label x:Name="Fr4" /> 68 <Label x:Name="Sa4" /> 69 70 <Label x:Name="Su5" /> 71 <Label x:Name="Mo5" /> 72 <Label x:Name="Tu5" /> 73 <Label x:Name="We5" /> 74 <Label x:Name="Th5" /> 75 <Label x:Name="Fr5" /> 76 <Label x:Name="Sa5" /> 77 78 <Label x:Name="Su6" /> 79 <Label x:Name="Mo6" /> 80 <Label x:Name="Tu6" /> 81 <Label x:Name="We6" /> 82 <Label x:Name="Th6" /> 83 <Label x:Name="Fr6" /> 84 <Label x:Name="Sa6" /> 85 </UniformGrid> 86 </StackPanel> 87</Window>

cs

1using System; 2using System.Collections.Generic; 3using System.Windows; 4using System.Windows.Controls; 5 6namespace Questions259221 7{ 8 public partial class MainWindow : Window 9 { 10 private bool combbox_change = true; 11 private List<Label> test; 12 13 public MainWindow() 14 { 15 InitializeComponent(); 16 17 DateTime now = DateTime.Now; 18 19 List<int> years = new List<int>(); 20 for(int i = now.Year - 10; i <= now.Year + 10; i++) 21 { 22 years.Add(i); 23 } 24 int[] month = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }; 25 26 27 // ラベルリストの初期化&中身 28 test = new List<Label> 29 { 30 Su1, Mo1, Tu1, We1, Th1, Fr1, Sa1, 31 Su2, Mo2, Tu2, We2, Th2, Fr2, Sa2, 32 Su3, Mo3, Tu3, We3, Th3, Fr3, Sa3, 33 Su4, Mo4, Tu4, We4, Th4, Fr4, Sa4, 34 Su5, Mo5, Tu5, We5, Th5, Fr5, Sa5, 35 Su6, Mo6, Tu6, We6, Th6, Fr6, Sa6, 36 }; 37 38 ChangeYEAR.ItemsSource = years; 39 ChangeMONTH.ItemsSource = month; 40 41 combbox_change = false; 42 ChangeYEAR.SelectedItem = now.Year; 43 combbox_change = true; 44 ChangeMONTH.SelectedItem = now.Month; 45 } 46 47 private void SelectionChanged(object sender, SelectionChangedEventArgs e) 48 { 49 if(combbox_change != true) return; 50 51 // 一旦全ラベルをクリア 52 foreach(Label label in test) label.Content = ""; 53 54 var firstDate = new DateTime((int)ChangeYEAR.SelectedItem, (int)ChangeMONTH.SelectedItem, 1); 55 int lastday = firstDate.AddMonths(1).AddDays(-1).Day; 56 int dayOFWeek = (int)firstDate.DayOfWeek; 57 58 for(int day = 1; day <= lastday; day++) 59 { 60 int index = day - 1 + dayOFWeek; 61 test[index].Content = day; 62 } 63 } 64 65 private void Today_Click(object sender, RoutedEventArgs e) 66 { 67 DateTime now = DateTime.Now; 68 69 ChangeYEAR.SelectedItem = now.Year; 70 ChangeMONTH.SelectedItem = now.Month; 71 } 72 } 73}

オススメないし初心者向けのものがあれば教えてください

本の形になっているのはこちらでしょうか(無料で内容を公開されていますが)
WPF 4.5入門 | 大田一希 | 工学 | Kindleストア | Amazon

あとはWeb上の情報でしょうか。

ある程度まとまっているもの(順不同)
連載:WPF入門 - @IT
» WPF 学習用ドキュメント作りました
WPF Prism 入門エントリまとめ | :: halation ghost :: ちょっと難しめ

ブログ(順不同)
かずきのBlog@hatena
grabacr.nét | PaaS (Patchouli as a Shachiku)
uEN Laboratory 記事は少ないがこんなこともできるんだ」と夢が広がる

投稿2020/05/06 07:30

編集2023/07/21 13:52
TN8001

総合スコア9317

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Hiroki.T

2020/05/06 13:56

回答ありがとうございます ChangYEARのメソッドは初めの時に消したような記憶があったので、 それで修正できました 参考にしたのは https://crieit.net/magazines/doraxdorax/WPF自作カレンダー です 何点か変えているのは、まるっきり同じでは面白くないと思ったからなんですけど、そのせいか頭がこんがらがってしまいました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問