There had been similar discussions in the forum: Don't use TToolset.Add to add tools, but set the tool's property Toolset instead. The property setter calls the Add, plus sets the "Toolset" member of the new tool, and this avoids the crash:
procedure TForm1.Button1Click(Sender: TObject);
var
myChart: TChart;
ctMain: TChartToolset;
ctMainPanUD: TPanDragTool;
begin
myChart:= TChart.Create (Form1);
myChart.Visible:=True;
myChart.Parent:= Form1;
ctMain:= TChartToolset.Create (myChart);
ctMainPanUD:= TPanDragTool.Create(ctMain);
ctMainPanUD.Directions:=[pdUp,pdDown];
ctMainPanUD.Shift:=[ssAlt,ssLeft];
ctMainPanUD.Enabled:=True;
//ctMain.Tools.Add (ctMainPanUD); // wrong
ctMainPanUD.Toolset := ctMain; // correct
myChart.Toolset:=ctMain;
end;